Javaweb学习笔记之XML(五):使用 XPath 技术快速定位 XML 中的元素,并使用 Dom4J 操作该元素

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

猜你喜欢

转载自blog.csdn.net/qq_29331365/article/details/89922760