xPath教程点击打开链接
xPath引入
问题:当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦!!!
xPath作用
主要是用于快速获取所需的节点对象。
在dom4j中如何使用xPath技术
1)导入xPath支持jar包(Dom4j中的一个辅助包) 。 jaxen-1.1-beta-6.jar
点击打开链接
2)使用xpath方法
List<Node> selectNodes("xpath表达式"); 查询多个节点对象
Node selectSingleNode("xpath表达式"); 查询一个节点对象
xpath语法:
/ 绝对路径 表示从xml的根位置开始或子元素(一个层次结构)
// 相对路径 表示不分任何层次结构的选择元素。
* 通配符 表示匹配所有元素
[] 条件 表示选择什么条件下的元素
@ 属性 表示选择属性节点
and 关系 表示条件的与关系(等价于&&)
or 关系 表示条件的与关系(等价于||)
text() 文本 表示选择文本内容
package com.dom4j.xpath;
import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;
/**
* Author:Liu Zhiyong(QQ:1012421396)
* Version:Version_1
* Date:2016年11月6日22:23:20
* Desc:
xPath引入
问题:当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦!!!
xPath作用
主要是用于快速获取所需的节点对象。
在dom4j中如何使用xPath技术
1)导入xPath支持jar包 。 jaxen-1.1-beta-6.jar
2)使用xpath方法
List<Node> selectNodes("xpath表达式"); 查询多个节点对象
Node selectSingleNode("xpath表达式"); 查询一个节点对象
xpath语法:
/ 绝对路径 表示从xml的根位置开始或子元素(一个层次结构)
// 相对路径 表示不分任何层次结构的选择元素。
* 通配符 表示匹配所有元素
[] 条件 表示选择什么条件下的元素
@ 属性 表示选择属性节点
and 关系 表示条件的与关系(等价于&&)
or 关系 表示条件的与关系(等价于||)
text() 文本 表示选择文本内容
*/
public class Demo1 {
/**
* 删除id值为2的学生标签
* @throws Exception
*/
@Test
public void test1() throws Exception {
//创建读入对象,读取xml文档,获取Document对象
Document document = new SAXReader().read(new File("./src/student.xml"));
//查询到属性id为2的学生标签
Element stuEle = (Element)document.selectSingleNode("//Student[@id='2']");
//删除标签
stuEle.detach();
//写入xml文件
FileOutputStream out = new FileOutputStream(new File("./src/Student4.xml"));
OutputFormat format = new OutputFormat().createPrettyPrint();
format.setEncoding("utf-8");
XMLWriter writer = new XMLWriter(out, format);
writer.write(document);
//关闭资源
writer.close();
out.close();
}
@Test
public void test2() throws Exception {
//创建读入对象,读取xml文档,获取Document对象
Document document = new SAXReader().read(new File("./src/student5.xml"));
String xpath = "";
/*
* 1. / 绝对路径 表示从xml的根位置开始或子元素(一个层次结构)
*/
xpath = "/Students";
xpath = "/Students/Student";
/*
* 2. // 相对路径 表示不分任何层次结构的选择元素。
*/
xpath = "//Student";
xpath = "//Student/name";
xpath = "//name";
/*
* 3. * 通配符 表示匹配所有元素
*/
xpath = "/Students/*";//根标签Students下的所有子标签
xpath = "/Students//*";//根标签Students下的所有标签
/*
* 4. [] 条件 表示选择什么条件下的元素
* @ 属性 表示选择属性节点
*/
xpath = "//Student[@id]";//获取带有id属性的Student标签
xpath = "//Student[2]";//获取第二个Student标签
xpath = "//Student[last()]";//获取最后一个Student标签
xpath = "//Student[id[text()='001']]";//获取所有Student标签下面id标签文本值为001的Student标签
/*
* 5. @ 属性 表示选择属性节点
*/
xpath = "//@id";//获取有id属性的属性
xpath = "//Student[@id]";//获取包含id属性的标签
xpath = "//Student[not(@id)]";//获取不包含id属性的标签
xpath = "//Student[@id='2']";//选取id属性值为2的Student标签
/*
* 6.
and 关系 表示条件的与关系(等价于&&)
or 关系 表示条件的与关系(等价于||)
*/
//获取id属性为1,且name属性为liu的Student标签
xpath = "//Student[@id='1' and @name='liu']";
//获取id属性为1,或者name属性为liu的Student标签
xpath = "//Student[@id='1' or @name='liu']";
/*
* 7. text() 文本 表示选择文本内容
*/
xpath = "/Students/Student/name/text()";//选择name标签下的文本对象,返回Text对象
xpath = "//name/text()";//选择name标签下的文本对象,返回Text对象
xpath = "//name[text()='木丁西']";//选择name值为“木丁西”的标签
List<Node> list = document.selectNodes(xpath);
for(Node node : list){
System.out.println(node);
}
}
}