30.3 xml检索—Xpath
需要导入jar包(dom4j和jaxen.jar),Xpath技术依赖Dom4j技术
Xpath使用路径表达式来定位xml文档中的元素节点或属性节点
方法名字 | 说明 |
---|---|
Node.selectSingleNode(“路径表达式”) | 获取符合表达式的唯一元素 |
List selectNodes(“路径表达式”) | 获取符合表达式的元素集合 |
30.3.1Xpath绝对路径
采用绝对路径获取从根节点开始逐层的查找/contactList/contact/name节点列表并打印信息。
方法名 | 说明 |
---|---|
/根元素/子元素/孙元素 | 从根元素开始,一级一级向下查找,不能跨级 |
public class Test01 {
public static void main(String[] args) throws DocumentException {
// 创建解析器对象
SAXReader sr = new SAXReader();
// 利用解析器读取本地xml文件(30.1中的xml)
Document document = sr.read(new File("code_java02\filedemo\person.xml"));
//检索单个:document.selectSingleNode("路径");
//检索多个:document.selectNodes("路径");
//检索多个:document.selectNodes("路径");
List<Node> nodeList = document.selectNodes("/persons/person/name");
for (Node node : nodeList) {
// node:表示每一个username标签
String name = node.getName();
System.out.println(name);//name name
}
//检索单个:document.selectNodes("路径");
// Node node = document.selectSingleNode("/persons/person/name");
Element node = (Element) document.selectSingleNode("/persons/person/name");
String text = node.getText();
System.out.println(text);//zhangsan
}
}
30.3.2 Xpath相对路径
- 先得到根节点contactList
- 再采用相对路径获取下一级contact节点的name子节点并打印信息
方法名 | 说明 |
---|---|
./子元素/孙元素 | 从当前元素开始,一级一级向下查找,不能跨级 |
public class Test02 {
public static void main(String[] args) throws DocumentException {
// 创建解析器对象
SAXReader sr = new SAXReader();
// 利用解析器读取本地xml文件(30.1中的xml文件)
Document document = sr.read(new File("code_java02\filedemo\person.xml"));
//检索单个:document.selectSingleNode("路径");
//检索多个:document.selectNodes("路径");
// 参照物:自己本身,也就是根元素
Element rootElement = document.getRootElement();
// 利用相对路径,检索单个
// Node node = rootElement.selectSingleNode("./person/name");
Element node = (Element) rootElement.selectSingleNode("./person/name");
String name = node.getName();
String text = node.getText();
System.out.println(name+","+text);
//name,zhangsan
// 利用相对路径,检索多个
List<Node> nodes = rootElement.selectNodes("./user/username");
for (Node node1 : nodes) {
System.out.println(node1.getName());
//name name
}
}
}
30.3.3 Xpath全文检索
public class Test01 {
public static void main(String[] args) throws DocumentException {
// 创建解析器对象
SAXReader sr = new SAXReader();
// 利用解析器读取本地xml文件(30.1中xml)
Document document = sr.read(new File("code_java02\\filedemo\\person.xml"));
//检索单个:document.selectSingleNode("路径");
//检索多个:document.selectNodes("路径");
//检索多个:document.selectNodes("路径");
List<Node> nodesList1 = document.selectNodes("//name");
System.out.println(nodesList1.size());//3
for (Node node : nodesList1) {
System.out.println(node.getText());
//zhangsan lisi zhaoliu
}
List<Node> nodeList2 = document.selectNodes("//person/name");
System.out.println(nodeList2.size());//2
for (Node node : nodeList2) {
System.out.println(node.getText());
//zhangsan lisi
}
}
}