• XML解析之XPath


    XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。
    XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。
    因此,对 XPath 的理解是很多高级 XML 应用的基础。


    基本的XPath语法类似于在一个文件系统中定位文件,如果路径以斜线 / 开始, 那么该路径就表示到一个元素的绝对路径
    /AAA
    选择根元素AAA
    /AAA/CCC
    选择AAA的所有CCC子元素
    /AAA/DDD/BBB
    选择AAA的子元素DDD的所有子元素BBB

    如果路径以双斜线 // 开头, 则表示选择文档中所有满足双斜线//之后规则的元素(无论层级关系)
    //BBB
    选择所有BBB元素
    //DDD/BBB
    选择所有父元素是DDD的BBB元素

    星号 * 表示选择所有由星号之前的路径所定位的元素
    /AAA/CCC/DDD/*
    选择所有路径依附于/AAA/CCC/DDD的元素
    /*/*/*/BBB
    选择所有的有3个祖先元素的BBB元素
    //*
    选择所有元素

    方块号[ ] 里的表达式可以进一步的指定元素, 其中数字表示元素在选择集里的位置, 而 last() 函数则表示选择集中的最后一个元素.
    /AAA/BBB[1]
    选择AAA的第一个BBB子元素
    /AAA/BBB[last()]
    选择AAA的最后一个BBB子元素

    @
    //@id
    选择所有的id属性
    //BBB[@id]
    选择有id属性的BBB元素
    //BBB[@name]
    选择有name属性的BBB元素
    //BBB[@*]
    选择有任意属性的BBB元素
    //BBB[not(@*)]
    选择没有属性的BBB元素

    //和DOM4j对比
    Book.xml 最终输出结果:output.xml
    <?xml version="1.0" encoding="utf-8"  ?>
    <书架>
            <书>
            <书名 id="001">浪潮之巅</书名>
                    <作者>吴军</作者>
                    <售价>29</售价>
            </书>
            <书>
                    <书名 id='002'>数学之美</书名>
                    <作者>吴军</作者>
                    <售价><第一版>29</第一版></售价>
            </书>
    </书架>
    <?xml version="1.0" encoding="utf-8"?>
    <书架>
      <书>
        <书名 id="001">浪潮之巅</书名> 
        <作者>吴军</作者> 
        <售价>29</售价>
      </书> 
      <书>
        <书名 id="002">java编程思想</书名> 
        <作者>吴军</作者> 
        <售价/>
      </书>
    </书架>
    package com.java.dom4j;
    import java.io.FileOutputStream;
    import java.util.List;
    import org.dom4j.Branch;
    import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.Node;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;

    public class Dom4jDemo {
            public static void main(String[] args) throws Exception {
    // 这里要导入第三方架包,右键->新建文件夹(lib),把dom4j-1.6.1.jar拷贝进来;然后选中右键->构建路径->添加到构建路径,资源下回出现“引用的库”,这时候才能点开架包使用
    // 做完上面的操作,系统就会提示导入刚才加架包
    // 通过saxreader获取document对象
                    SAXReader reader = new SAXReader();
                    Document document = reader.read("Books.xml");
    // 按照XPath的方式进行操作

    // 获取某个具体的节点内容,得到第一本书的售价 XPath='/书架/书/书名[1]'
    //这里还要导入包 jaxen-1.1-beta-6;
                    Node node = document.selectSingleNode("/书架/书/书名[1]");
                    System.out.println("/书架/书/书名[1]: " + node.getText());
    // 打印某节点的所有元素节点 打印第二本书的所有元素节点  XPath=/书架/书[2]/*
                    List selectNodes = document.selectNodes("/书架/书[2]/*");
                    for(int i=0;i<selectNodes.size();++i){
                            Element child=(Element)selectNodes.get(i);
                            System.out.println("/书架/书[2]/*: " + child.getName());
                    }

    //修改某个节点的主题内容   把第二本书的名字改《java编程思想》 
    //XPath=/书架/书[2]/书名
                    Node node2 = document.selectSingleNode("/书架/书[2]/书名");
                    node2.setText("java编程思想");

    //删除指定元素节点  XPath=/书架/书[2]/售价/第一版
                    Node node3 = document.selectSingleNode("/书架/书[2]/售价/第一版");
                    System.out.println("/书架/书[2]/售价/第一版: " + node3.getName());
                    node3.detach();

    // 标准的保存语句,dom4j写回文档会自动写换行方便观看
                    OutputFormat format = OutputFormat.createPrettyPrint();  
    // 指定XML编码                 
                    format.setEncoding("utf-8");
                    XMLWriter writer = new XMLWriter(new FileOutputStream ("output.xml"),format);
                    writer.write(document);
                    writer.close();
            }
    }

  • 相关阅读:
    Fatal error: Maximum execution time of 30 seconds exceeded in
    常见变量命名规则
    Rust使用国内镜像安装依赖
    flutter使用国内镜像源
    7个每天晚上应该坚持的好习惯
    网络数据传输格式的思考
    Deepin安装 ruby 包管理工具 RVM(适用于 Debian 系列)
    C语言数据类型关键字
    win10 powershell禁止运行脚本解决
    Linux 查看系统相关信息(系统发型版本及内核版本等)
  • 原文地址:https://www.cnblogs.com/meihao1203/p/9181727.html
Copyright © 2020-2023  润新知