Xpath路径表达式:XML文档查找数据的语言
(参考:http://www.ruanyifeng.com/blog/2009/07/xpath_path_expressions.html)
基本表达式:
- nodename(节点名称):表示选择该节点的所有子节点
- "/":表示选择根节点
- "//":表示选择任意位置的某个节点
- "@": 表示选择某个属性
- "."表示当前节点。
- ".."表示当前节点的父节点
使用Jaxen开源XPath库:下载https://maven.aliyun.com/mvn/search搜索
package com.ulikeme.dom4j;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
public class XPathTestor {
public void xpath(String xpathExp) {
String file="E:/hr.xml";
SAXReader reader=new SAXReader();
try {
Document document=reader.read(file);
//selectNodes执行xpath表达式
List<Node> nodes= document.selectNodes(xpathExp);
for(Node node:nodes) {
Element emp=(Element)node;
System.out.println(emp.attributeValue("no"));
System.out.println(emp.elementText("name"));
System.out.println(emp.elementText("age"));
System.out.println(emp.elementText("salery"));
System.out.println("__________________________");
}
} catch (DocumentException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
XPathTestor testor=new XPathTestor();
// testor.xpath("/hr/employee");
// testor.xpath("//employee");
//工资小于4k输出
testor.xpath("//employee[salery<4000]");
testor.xpath("//employee[name='李白']");
testor.xpath("//employee[@no='002']");
//employee下第一个员工输出
testor.xpath("//employee[1]");
//employee下最后一个员工输出
testor.xpath("//employee[last()]");
//获取前两个员工输出
testor.xpath("//employee[position()<2]");
//同时输出第一个和第三个员工
testor.xpath("//employee[1] | //employee[3] ");
}
}