版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29331365/article/details/89922760
package com.demo.a_dom4j;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import org.junit.Test;
/*
XPath 技术:
当使用 DOM4J 查询比较深的层次结构的节点(标签、属性、文本)时比较麻烦;
XPath 技术主要用于快速获取所需的节点对象;
导入 XPath 的支持包:jaxen-1.1-beta-6.jar
方法:
List<Node> list = document.selectNodes("xpath表达式"); // 查找多个节点的集合
Node node = document.selectSingleNode("xpath表达式"); // 查找单个节点
*/
public class Demo3 {
/*
* xpath 表达式语法练习:xpath 具体语法可查看 xpath 手册;
* / 绝对路径 基本的 xpath 语法类似于在一个文件系统中定位文件,如果路径以斜线(/)开始,表示一个元素的绝对路径;
* // 相对路径 表示不分任何层次结构的选择元素;
* * 通配符 表示匹配所有元素
* [] 条件 表示选择什么条件下的元素
* @ 属性 表示属性
* and 关系 表示与关系(并且)
* text() 文本 表示选择文本节点(对象)
*/
@SuppressWarnings("unchecked")
@Test
public void test2() throws Exception{
// 读取 XML 文档,返回 Document 对象
Document doc = new SAXReader().read("./src/contact.xml");
// xpath 表达式
String xpath = "";
/*
* 1、 / 绝对路径 基本的 xpath 语法类似于在一个文件系统中定位文件,如果路径以斜线(/)开始,表示一个元素的绝对路径;
*/
xpath = "/contactList"; // 查找根元素 contactList
xpath = "/contactList/contact"; // 查找根元素 contactList 下的 contact 子元素
/*
* 2、 // 相对路径 表示不分任何层次结构的选择元素;
*/
xpath = "//contact/name"; // 查找所有 contact 元素下的 name 子元素
xpath = "//name"; // 查找所有的 name 元素
/*
* 3、 * 通配符 表示匹配所有元素
*/
xpath = "/contactList/*"; // 查找根元素 contactList 下的所有子元素
xpath = "/contactList//*"; // 查找根元素 contactList 下的所有元素
/*
* 4、 [] 条件 表示选择什么条件下的元素
*/
xpath = "//contact[2]"; // 查找第二个 contact 元素(索引从 1 开始)
xpath = "//contact[last()]"; // 查找最后一个 contact 元素
/*
* 5、 @ 属性 表示选择属性节点
*/
xpath = "//@id"; // 查找所有的 id 属性
xpath = "//contact[@id]"; // 查找所有带有 id 属性的 contact 元素
xpath = "//*[not(@id)]"; // 查找所有没有 id 属性的元素
xpath = "//contact[@id='002']"; // 查找 id 属性值为 002 的 contact 元素
xpath = "//contact[@id='001' and @name='eric']"; // 查找 id 属性值为 001,并且 name 属性值为 eric 的元素
/*
* 6、 text() 表示选择文本节点
*/
xpath = "//name/text()"; // 查找所有 name 节点下的 文本对象
xpath = "//contact/name[text()='张三']"; // 选择姓名为 "张三" 的 name 标签
// 使用 xpath 表达式选择指定的节点
List<Node> list = doc.selectNodes(xpath);
// 输出查到的所有节点
for (Node node : list) {
System.out.println(node);
}
}
}
其中 ./src/contact.xml 文件为:
<?xml version="1.0" encoding="utf-8"?>
<contactList>
<contact id="001" name="eric">
<name>张三</name>
<age>20</age>
<phone>134222223333</phone>
<email>[email protected]</email>
<qq>432221111</qq>
</contact>
<contact id="002">
<name>李四</name>
<age>20</age>
<phone>134222225555</phone>
<email>[email protected]</email>
<qq>432222222</qq>
</contact>
<abc></abc>
</contactList>
Dom4J下载地址:https://download.csdn.net/download/qq_29331365/11164486
XPATH下载地址:https://download.csdn.net/download/qq_29331365/11164497