返回顶部

收藏

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 

标签:java

收藏

0人收藏

支持

0

反对

0

相关聚客文章
  1. astron 发表 2018-05-21 12:21:44 《JDK10新特性官方文档》从JDK10中移除javah工具
  2. darida 发表 2018-05-21 10:55:17 购物车模块
  3. darida 发表 2018-05-21 11:12:28 Java线程池深入理解
  4. yeseng 发表 2018-05-21 11:14:28 Java并发系列 — CAS
  5. hellas 发表 2018-05-21 12:13:24 使用 Spring Data 以 Redis 作为数据存储来构建应用
  6. 尖兵 发表 2018-05-21 15:50:11 Spring Boot 1.X和2.X优雅重启实战
  7. 尖兵 发表 2018-05-21 15:50:11 Spring Boot 1.X和2.X优雅重启实战
  8. xubiao.zhuang 发表 2018-05-20 10:05:09 上传 Java 库到 Maven central repository
  9. puefu.he 发表 2018-05-20 10:05:09 Spring技术内幕:设计理念和整体架构概述
  10. wenming.gapo 发表 2018-05-20 10:08:09 Java效率工具之Lombok
  11. hanze 发表 2018-05-20 11:05:43 随想录(对比着c学java)
  12. hanze 发表 2018-05-20 11:05:43 随想录(对比着c学java)

发表评论