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