• XPATH


     XPATH
    1. 路径表达式

    XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。

    由于我们单纯使用dom定位节点时,大部分时间需要一层一层的处理,如果有了xPath,我们定位我们的节点将变得很轻松。他可以根据路径,属性,甚至是条件进行节点的检索。
    XPath 使用路径表达式在 XML 文档中进行导航
    XPath 包含一个标准函数库
    XPath 是 XSLT 中的主要元素
    XPath 是一个 W3C 标准

    路径表达式语法:
    斜杠(/)作为路径内部的分割符。
    同一个节点有绝对路径和相对路径两种写法:
    路径(absolute path)必须用"/"起首,后面紧跟根节点,比如/step/step/...。
    相对路径(relative path)则是除了绝对路径以外的其他写法,比如 step/step, 也就是不使用"/"起首。
    "."表示当前节点。
    ".."表示当前节点的父节点
    nodename(节点名称):表示选择该节点的所有子节点
    "/":表示选择根节点
    "//":表示选择任意位置的某个节点
    "@": 表示选择某个属性
    我们以下面的xml来举例说明:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <bookstore>
      <book>
            <title lang="eng">Harry Potter</title>
               <price>29.99</price>
            </book>
      <book>
            <title lang="eng">Learning XML</title>
            <price>39.95</price>
            </book>
    </bookstore>


    2. 谓语

    所谓"谓语条件",就是对路径表达式的附加条件。所有的条件,都写在方括号"[]"中,表示对节点进行进一步的筛选。
    3. 通配符

    通配符的使用如下:
    "*"表示匹配任何元素节点。
    "@*"表示匹配任何属性值。
    node()表示匹配任何类型的节点。
    4. Dom4J对XPath的支持

    DOM4J支持使用XPATH来检索XML内容。若想使用需要引入一个jar包到项目中,该jar包名字应为: jaxen-xx-xx.jar。版本不同,可能名字略有差别。
    若不引用此包,程序会引发:
    java.lang.NoClassDefFoundError:org/jaxen/jaxenException异常。
    Document提供了一个对XPATH检索的方法:
    List selectNodes(Stirng xpath)
    传入xpath路径,获取相应的信息 .

        /**
         * 测试xpath
         */
        public static void testXPath(){
            try {
                SAXReader reader =new SAXReader();
                File file =new File("book.xml");
                Document doc =reader.read(file);
                /*
                 * List selectNodes()
                 * Dom4j的Document对XPath的支持方法
                 * 传入路径表达式,获取对应的节点信息
                 */
    //            List list =doc.selectNodes("/bookstore/book/price");
                List list =doc.selectNodes("//@lang");
                System.out.println("检索出了:"+list.size()+"项");
                for(Object o : list){
    //                Element element =(Element)o;
    //                System.out.println(element.getText());
                    Attribute attr = (Attribute)o;
                    System.out.println(attr.getValue());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        public static void main(String[] args) {
            // List<Emp> list =getAllEmp("emp.xml");
            // for(Emp emp:list){
            // System.out.println(emp);
            // }
    //        List<Emp> list = new ArrayList<Emp>();
    //        list.add(new Emp(1, "张三", 22, "男", 5000));
    //        writeXmlToFile(list, "employee.xml");
            testXPath();
            
        }
    }
  • 相关阅读:
    Java并发基础10:原子性操作类的使用
    Java并发基础09. 多个线程间共享数据问题
    Java并发基础08. 造成HashMap非线程安全的原因
    Java并发基础07. ThreadLocal类以及应用技巧
    Java并发基础06. 线程范围内共享数据
    Java并发基础05. 传统线程同步通信技术
    Java并发基础04. 线程技术之死锁问题
    我是如何从通信转到Java软件开发工程师的?
    IOS 判断耳机插入/拔出
    海量数据处理
  • 原文地址:https://www.cnblogs.com/manue1/p/4514961.html
Copyright © 2020-2023  润新知