使用dom4j支持XPATH操作:
可以直接获取到目标元素,不需要层层解析。
第一种形式:/AAA/DDD/BBB:表示一层一层的,AAA下面DDD下面的BBB
第二种形式://BBB:表示和这个名称相同,只要名称是BBB,都能得到
第三种形式:/*:表示所有元素
第四种形式:BBB[1]:表示第一个BBB元素 、 BBB[last()]:表示最后一个元素
第五种形式://BBB[@id]:表示只要BBB元素上面有id属性都能得到
第六种形式://BBB[@id='XXX']:表示元素名称是BBB,在BBB上面有id属性,并且id的属性值是XXX
使用dom4j默认不支持xpath,所以要导包
在dom4j中提供了两个方法用来支持xpath
1、selectNodes("xpath的表达式");获取多个节点
可以直接获取到目标元素,不需要层层解析。
第一种形式:/AAA/DDD/BBB:表示一层一层的,AAA下面DDD下面的BBB
第二种形式://BBB:表示和这个名称相同,只要名称是BBB,都能得到
第三种形式:/*:表示所有元素
第四种形式:BBB[1]:表示第一个BBB元素 、 BBB[last()]:表示最后一个元素
第五种形式://BBB[@id]:表示只要BBB元素上面有id属性都能得到
第六种形式://BBB[@id='XXX']:表示元素名称是BBB,在BBB上面有id属性,并且id的属性值是XXX
使用dom4j默认不支持xpath,所以要导包
在dom4j中提供了两个方法用来支持xpath
1、selectNodes("xpath的表达式");获取多个节点
2、selectSingleNode("xpath的表达式");获取一个节点
xml实例:
<?xml version="1.0" encoding="UTF-8"?>
<person>
<student id="hhh">
<name>张三</name>
<age>300</age>
</student>
<student>
<name>李四</name>
<age>20</age>
</student>
</person>
java代码:
import java.io.Reader;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
public class Dom4j_xpath {
public static void main(String[] args) {
//getNames();
getName();
}
/**
* 获得所有的目标标签
*/
private static void getNames() {
try {
//创建SAX解析器
SAXReader reader = new SAXReader();
//得到document
Document document = reader.read("src/XPATH/Person.xml");
//得到所有的name元素
List<Node> list = document.selectNodes("//name");
//遍历 增强for循环
for (Node name : list) {
//得到name的值
String s = name.getText();
System.out.println(s);
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
private static void getName() {
try{
//创建SAX解析器
SAXReader reader = new SAXReader();
//得到document
Document document = reader.read("src/XPATH/Person.xml");
//得到目标元素
Node name = document.selectSingleNode("//student[@id='hhh']/name");
//得到目标元素中的值
String s = name.getText();
System.out.println(s);
}catch(Exception e){
e.printStackTrace();
}
}
}