简单介绍:
- XPath 是一门在 XML、html 文档中查找信息的语言。
- XPath 是一个 W3C 标准,可通过W3CSchool文档查阅语法
由于DOM4J在解析XML时只能一层一层解析,所以当XML文件层数过多时使用会很不方便,结合XPATH就可以直接获取到某个元素
默认的情况下,dom4j不支持xpath,如果想要在dom4j里面使用xpath,需要引入支持xpath的jar包 jaxen-1.1.6.jar
在dom4j里面提供了两个方法,用来支持xpath
List<Node> selectNodes("xpath表达式"),用来获取多个节点
Node selectSingleNode("xpath表达式"),用来获取一个节点
xpath表达式常用查询形式:
-
第一种查询形式
/AAA/DDD/BBB: 表示一层一层的,AAA下面 DDD下面的BBB -
第二种查询形式
//BBB: 表示和这个名称相同,表示只要名称是BBB 都得到 -
第三种查询形式
/*: 所有元素 -
第四种查询形式
BBB[1]:表示第一个BBB元素
BBB[last()]:表示最后一个BBB元素 -
第五种查询形式
//BBB[@id]: 表示只要BBB元素上面有id属性 都得到 -
第六种查询形式
//BBB[@id=‘b1’] 表示元素名称是BBB,在BBB上面有id属性,并且id的属性值是b1
案例实现
<?xml version="1.0" encoding="UTF-8" ?>
<students>
<student number="heima_0001">
<name id="itcast">
<xing>张</xing>
<ming>三</ming>
</name>
<age>18</age>
<sex>male</sex>
</student>
<student number="heima_0002">
<name>jack</name>
<age>18</age>
<sex>female</sex>
</student>
</students>
编写xpath代码解析xml文件
import org.dom4j.Document;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.List;
/**
*XPath查询
*/
public class Demo4jXpath {
public static void main(String[] args) throws Exception {
SAXReader saxReader=new SAXReader();
String path = Demo4jXpath.class.getClassLoader().getResource("student.xml").getFile();
File file = new File(path);
Document document=saxReader.read(file);
//4.结合xpath语法查询
//4.1查询所有student标签
List<Node> nodes = document.selectNodes("//student");
for (Node node : nodes) {
System.out.println(node);
}
System.out.println("--------------------");
//4.2查询所有student标签下的name标签
nodes = document.selectNodes("//student/name");
for (Node node : nodes) {
System.out.println(node);
}
System.out.println("--------------------");
//4.3查询student标签下带有id属性的name标签
nodes = document.selectNodes("//student/name[@id]");
for (Node node : nodes) {
System.out.println(node);
}
System.out.println("--------------------");
//4.4查询student标签下带有id属性的name标签 并且id属性值为itcast
nodes = document.selectNodes("//student/name[@id='itcast']");
for (Node node : nodes) {
System.out.println(node);
}
}
}
【学习,好好干!】