java通过XPath解析xml节点详解编程语言

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(); 
 
    } 
 
}

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>

输出:

1. rss 
2. rss 
3. channel 
4. title language item item  
5. title title title  
6. rss channel language item link item link  
7. rss channel item item  
8. title link title link 

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/10853.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论