java使用XPath查找xml节点

来源:互联网 发布:c数据库编程实战经典 编辑:程序博客网 时间:2024/06/05 12:05

原文地址:http://outofmemory.cn/code-snippet/2778/java-usage-XPath-seek-xml-jiedian

java 代码,通过xpath 从xml文件中查找到节点,并可转换成String输出。

package cn.outofmemory.snippets.core;import java.io.File;import java.io.FileInputStream;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.xpath.XPath;import javax.xml.xpath.XPathConstants;import javax.xml.xpath.XPathFactory;import org.w3c.dom.Document;import org.w3c.dom.Node;import org.w3c.dom.NodeList;public class FindElementsByAbsoluteLocationWithXPath {    public static void main(String[] args) throws Exception {        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();        dbf.setValidating(false);        DocumentBuilder db = dbf.newDocumentBuilder();        Document doc = db.parse(new FileInputStream(new File("in.xml")));        XPathFactory factory = XPathFactory.newInstance();        XPath xpath = factory.newXPath();        String expression;        Node node;        NodeList nodeList;        // 1. root element        expression = "/*";        node = (Node) xpath.evaluate(expression, doc, XPathConstants.NODE);        System.out.println("1. " + node.getNodeName());        // 2. root element (by name)        expression = "/rss";        node = (Node) xpath.evaluate(expression, doc, XPathConstants.NODE);        System.out.println("2. " + node.getNodeName());        // 3. element under rss        expression = "/rss/channel";        node = (Node) xpath.evaluate(expression, doc, XPathConstants.NODE);        System.out.println("3. " + node.getNodeName());        // 4. all elements under rss/channel        expression = "/rss/channel/*";        nodeList = (NodeList) xpath.evaluate(expression, doc, XPathConstants.NODESET);        System.out.print("4. ");        for (int i = 0; i < nodeList.getLength(); i++) {            System.out.print(nodeList.item(i).getNodeName() + " ");        }        System.out.println();        // 5. all title elements in the document        expression = "//title";        nodeList = (NodeList) xpath.evaluate(expression, doc, XPathConstants.NODESET);        System.out.print("5. ");        for (int i = 0; i < nodeList.getLength(); i++) {            System.out.print(nodeList.item(i).getNodeName() + " ");        }        System.out.println();        // 6. all elements in the document except title        expression = "//*[name() != 'title']";        nodeList = (NodeList) xpath.evaluate(expression, doc, XPathConstants.NODESET);        System.out.print("6. ");        for (int i = 0; i < nodeList.getLength(); i++) {            System.out.print(nodeList.item(i).getNodeName() + " ");        }        System.out.println();        // 7. all elements with at least one child element        expression = "//*[*]";        nodeList = (NodeList) xpath.evaluate(expression, doc, XPathConstants.NODESET);        System.out.print("7. ");        for (int i = 0; i < nodeList.getLength(); i++) {            System.out.print(nodeList.item(i).getNodeName() + " ");        }        System.out.println();        // 8. all level-5 elements (the root being at level 1)        expression = "/*/*/*/*";        nodeList = (NodeList) xpath.evaluate(expression, doc, XPathConstants.NODESET);        System.out.print("8. ");        for (int i = 0; i < nodeList.getLength(); i++) {            System.out.print(nodeList.item(i).getNodeName() + " ");        }        System.out.println();    }}
将node 转换成String 输出
public static String NodetoString(Node node) {Transformer transformer = null;String result = null;if (node == null) {throw new IllegalArgumentException();}try {transformer = TransformerFactory.newInstance().newTransformer();} catch (Exception e) {throw new RuntimeException(e.getMessage());}if (transformer != null) {try {StringWriter sw = new StringWriter();transformer.transform(new DOMSource(node), new StreamResult(sw));return sw.toString();} catch (TransformerException te) {throw new RuntimeException(te.getMessage());}}return result;}

Input:

<?xml version="1.0" encoding="UTF-8"?><rss version="2.0">    <channel>        <title>Java Tutorials and Examples 2</title>        <language>en-us</language>        <item>            <title><![CDATA[Java Tutorials 2]]></title>            <link>http://www.javacodegeeks.com/</link>        </item>        <item>            <title><![CDATA[Java Examples 2]]></title>            <link>http://examples.javacodegeeks.com/</link>        </item>    </channel></rss>

0 0
原创粉丝点击