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
    评论
Java可以使用DOM、SAX、JDOM等方式来读取XML文件中的数据。以下是使用DOM方式读取XML文件中某个节点值的示例代码: ```java import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.w3c.dom.Node; import org.w3c.dom.Element; import java.io.File; public class ReadXML { public static void main(String argv[]) { try { File inputFile = new File("input.xml"); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(inputFile); doc.getDocumentElement().normalize(); NodeList nList = doc.getElementsByTagName("book"); Node nNode = nList.item(0); Element eElement = (Element) nNode; String title = eElement.getElementsByTagName("title").item(0).getTextContent(); System.out.println("Book title : " + title); } catch (Exception e) { e.printStackTrace(); } } } ``` 这段代码会读取名为`input.xml`的XML文件中第一个`book`节点的`title`子节点的值,并输出在控制台上。需要注意的是,此示例中的XML文件结构为: ```xml <?xml version="1.0"?> <catalog> <book id="bk101"> <author>Gambardella, Matthew</author> <title>XML Developer's Guide</title> <genre>Computer</genre> <price>44.95</price> <publish_date>2000-10-01</publish_date> <description>An in-depth look at creating applications with XML.</description> </book> <book id="bk102"> <author>Ralls, Kim</author> <title>Midnight Rain</title> <genre>Fantasy</genre> <price>5.95</price> <publish_date>2000-12-16</publish_date> <description>A former architect battles corporate zombies, an evil sorceress, and her own childhood to become queen of the world.</description> </book> </catalog> ``` 如果想要读取其他节点的值,可以将示例代码中的`getElementsByTagName`和`getElementsByTagName`方法中的参数值进行相应修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值