XPathテスト事例

6216 ワード

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

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 java.io.*;

/**
 * User: herry
 * Date: 15-5-20 20:44
 */
public class TestXPath {
    public static void main(String[] args) throws Exception {
        String testXML = "<?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>"; DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setValidating(false); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(new ByteArrayInputStream(testXML.getBytes("UTF-8"))); 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(); // 4.1 all elements under rss/channel/title expression = "/rss/channel/item"; nodeList = (NodeList) xpath.evaluate(expression, doc, XPathConstants.NODESET); System.out.print("4.1 "); for (int i = 0; i < nodeList.getLength(); i++) { Node node1 = nodeList.item(i); System.out.print(node1.getNodeName() + " "); /** * //para selects all the para descendants ofthe document root and thus selects all para elements in thesame document as the context node * .//para selects the para elementdescendants of the context node */ System.out.println("===="+((Element)xpath.evaluate("./title", node1, XPathConstants.NODE)).getTextContent()); } 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(); } }