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();
        
    }
}
原文地址:https://www.cnblogs.com/manue1/p/4514961.html