java xml文件_Java读取xml文件

package com.yuqiaotech.simplejee.xml;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStreamWriter;

import java.io.Writer;

import java.util.Iterator;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

import javax.xml.transform.OutputKeys;

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerConfigurationException;

import javax.xml.transform.TransformerException;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.stream.StreamResult;

import javax.xml.transform.stream.StreamSource;

import org.dom4j.DocumentException;

import org.dom4j.io.OutputFormat;

import org.dom4j.io.SAXReader;

import org.dom4j.io.XMLWriter;

import org.w3c.dom.Document;

import org.w3c.dom.NamedNodeMap;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;

import org.xml.sax.Attributes;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;

import com.sun.org.apache.xpath.internal.XPathAPI;

/**

* 大体代码是从http://www.javaeye.com/topic/181865抄来的。

* 下面这个是被广泛抄袭的,关于java里读取xml的概要介绍。

* http://blog.csdn.net/geekwang/archive/2008/05/25/2480504.aspx

*

* 我主要是把从绝对路径读取xml换成了从classpath读取。

* 另外添加了Transformer和xslt,以及XPath的演示,以及相关的一些链接。

*

* 另外可以搜一下jaxp了解这个规范的相关内容。

*

* @author YUQIAOTECH

*

*/

public class SimpleSample  {

static String xmlName = "test.xml";

static String xlst = "xslt.xsl";

static String dom4jSaveTo = "c:/text.xml";

static String xsltSaveTo = "c:/text2.html";

/**

* DOM方式

*/

public void DOM() {

long lasting = System.currentTimeMillis();

try {

InputStream in = SimpleSample.class.getResourceAsStream(xmlName);

DocumentBuilderFactory factory = DocumentBuilderFactory

.newInstance();

DocumentBuilder builder = factory.newDocumentBuilder();

Document doc = builder.parse(in); //注意这里的Document是org.w3c.dom包下的

NodeList nl = doc.getElementsByTagName("node");

for (int i = 0; i 

System.out.println("|| Name:  |"

+ doc.getElementsByTagName("name").item(i)

.getFirstChild().getNodeValue());

System.out.println("||Space:  |"

+ doc.getElementsByTagName("space").item(i)

.getFirstChild().getNodeValue());

System.out.println("-------------------------------------------------");            }

} catch (Exception e) {

e.printStackTrace();

}

System.out.println("耗时:"

+ (System.currentTimeMillis() - lasting) + " MS");

}

class SaxHandler extends DefaultHandler{

java.util.Stack tags = new java.util.Stack();

public void startElement(String uri, String localName, String qName,

Attributes attrs) {

tags.push(qName);

}

public void characters(char ch[], int start, int length)

throws SAXException {

String tag = (String) tags.peek();

if (tag.equals("name")) {

System.out.println("|| Name:  |" + new String(ch, start, length));

}

if (tag.equals("space")) {

System.out.println("||Space:  |" + new String(ch, start, length));

}

System.out.println("-------------------------------------------------");

}

}

/**

* SAX方式

*/

public void SAX() {

long lasting = System.currentTimeMillis();

try {

InputStream in = SimpleSample.class.getResourceAsStream(xmlName);

SAXParserFactory sf = SAXParserFactory.newInstance();

SAXParser sp = sf.newSAXParser();

SaxHandler reader = new SaxHandler();

sp.parse(in, reader);

} catch (Exception e) {

e.printStackTrace();

}

System.out.println("SAX 耗时:"

+ (System.currentTimeMillis() - lasting) + " MS");

}

/**

* 我懒得去了解JDOM了 :-)。

* JDOM方式

*/

//    public void JDOM() {

//        long lasting = System.currentTimeMillis();

//        try {

//            SAXBuilder builder = new SAXBuilder();

//            org.jdom.Document doc = builder.build(new File("F:/xmltest.xml"));

//            Element foo = doc.getRootElement();

//            List allChildren = foo.getChildren();

//            for (int i = 0; i 

//                System.out.println("|| Name:  |"

//                        + ((Element) allChildren.get(i)).getChild("name")

//                                .getText());

//                System.out.println("||Space:  |"

//                        + ((Element) allChildren.get(i)).getChild("space")

//                                .getText());

//                System.out.println("-------------------------------------------------");            }

//        } catch (Exception e) {

//            e.printStackTrace();

//        }

//        System.out.println("JDOM RUNTIME:"

//                + (System.currentTimeMillis() - lasting) + " MS");

//    }

/**

* DOM4J方式

*/

public void DOM4J() {

long lasting = System.currentTimeMillis();

try {

InputStream in = SimpleSample.class.getResourceAsStream(xmlName);

SAXReader reader = new SAXReader();

org.dom4j.Document doc = reader.read(in);  //注意这里的Document是org.dom4j包下的

org.dom4j.Element root = doc.getRootElement();

org.dom4j.Element foo;

for (Iterator i = root.elementIterator("node"); i.hasNext();) {

foo = (org.dom4j.Element) i.next();

System.out.println("|| Name:  |" + foo.elementText("name"));

System.out.println("||Space:  |" + foo.elementText("space"));

System.out.println("-------------------------------------------------");

}

} catch (Exception e) {

e.printStackTrace();

}

System.out.println("DOM4J 耗时:"

+ (System.currentTimeMillis() - lasting) + " MS");

}

/**

* 调用dom4j的保存方法。

*

* @throws DocumentException

* @throws IOException

*/

public static void saveDocByDom4J() throws DocumentException, IOException{

Writer out = new OutputStreamWriter(new FileOutputStream(dom4jSaveTo ),"GBK");

OutputFormat format = OutputFormat.createPrettyPrint();

XMLWriter writer = new XMLWriter( out, format );

InputStream in = SimpleSample.class.getResourceAsStream(xmlName);

SAXReader reader = new SAXReader();

org.dom4j.Document doc = reader.read(in);

writer.write( doc );

out.close();

}

/**

* 使用Transformer和xslt。

* http://www.ibm.com/developerworks/cn/xml/x-xslt/

*

* @throws ParserConfigurationException

* @throws SAXException

* @throws IOException

*/

public static void saveByTransformer() throws ParserConfigurationException, SAXException, IOException {

try {

InputStream in = SimpleSample.class.getResourceAsStream(xmlName);

InputStream inXsl = SimpleSample.class.getResourceAsStream(xlst);

DocumentBuilderFactory factory = DocumentBuilderFactory

.newInstance();

DocumentBuilder builder = factory.newDocumentBuilder();

Document doc = builder.parse(in);

StreamSource style = new StreamSource(inXsl);

TransformerFactory tFactory = TransformerFactory.newInstance();

Transformer transformer = tFactory.newTransformer(style);

transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");

DOMSource source = new DOMSource(doc);

StreamResult result = new StreamResult(new File(xsltSaveTo));

transformer.transform(source, result);

} catch (TransformerConfigurationException e) {

throw new RuntimeException(e.getMessage(), e);

} catch (TransformerException e) {

throw new RuntimeException(e.getMessage(), e);

}

}

//**********************XPath*****************************

/**

* 返回指定的节点。

*

* @param topNode

* @param xPath

* @return

*/

public static Node selectSingleNode(Node topNode, String xPath) {

try {

return XPathAPI.selectSingleNode(topNode, xPath);

} catch (TransformerException e) {

System.out.println(e.getMessage() + " xPath=" + xPath);

throw new RuntimeException(e.getMessage(), e);

}

}

/**

* 根据属性名获取属性节点。

*

* @param node

* @param attributeName

* @return

*/

public static Node getAttributeNode(Node node, String attributeName) {

NamedNodeMap namedNodeMap = node.getAttributes();

return namedNodeMap.getNamedItem(attributeName);

}

/**

* 几个方法的组合。

*

* @param node

* @param xPath

* @param attributeName

* @return

*/

public static String getAttributeNodeByXPath(Node node, String xPath,

String attributeName) {

Node rtn = null;

Node selectedNode = selectSingleNode(node, xPath);

if (selectedNode != null) {

rtn = getAttributeNode(selectedNode, attributeName);

}

if(rtn == null)return null;

return rtn.getNodeValue();

}

/**

* http://www.zvon.org/xxl/XPathTutorial/General_chi/examples.html

* http://www.ibm.com/developerworks/cn/xml/x-wxxm35.html

*

* @throws ParserConfigurationException

* @throws SAXException

* @throws IOException

*/

public static void XPath() throws ParserConfigurationException, SAXException, IOException{

InputStream in = SimpleSample.class.getResourceAsStream(xmlName);

DocumentBuilderFactory factory = DocumentBuilderFactory

.newInstance();

DocumentBuilder builder = factory.newDocumentBuilder();

Document doc = builder.parse(in);

String attr = getAttributeNodeByXPath(doc,"//node[@id=1]/name","alias");

System.out.println("alias="+attr);

}

public static void main(String arge[]) throws ParserConfigurationException, SAXException, IOException, DocumentException {

SimpleSample myXML = new SimpleSample();

System.out.println("=====================DOM=========================");

myXML.DOM();

System.out.println("=====================SAX=========================");

myXML.SAX();

//System.out.println("=====================JDOM========================");

//myXML.JDOM();

System.out.println("=====================DOM4J=======================");

myXML.DOM4J();

System.out.println("=====================DOM4J的格式化保存=======================");

saveDocByDom4J();

System.out.println("=====================Transformer和xslt的使用=======================");

saveByTransformer();

System.out.println("=====================XPath的演示=======================");

XPath();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值