1.定义版本 <dom4j.version>2.1.3</dom4j.version>
2.添加依赖管理
3.添加依赖
1.创建解析器对象
2.使用解析器对象读取XML文档生成Document对象
3.根据Document对象获取XML的元素(标签)信息
Dom4j重要的API说明
org.dom4j.Document常用方法
Element rootElement = document.getRootElement();//获取根标签
org.dom4j.Element的常用方法
String getName();//获取标签名
List <Elements> elements();//获取标签的子标签
String attributeValue(String name);//获取指定属性名称的属性值
String getText();//获取标签文本
String elementText(String name);//获取指定名称的子标签的文本
public class Dom4jParseUserXmlTest {
public static void main(String[] args) throws DocumentException {
//创建解析器对象
SAXReader saxReader = new SAXReader();
//选择InputStream in
Document document = saxReader.read(Dom4jParseUserXmlTest.class.getClassLoader().getResource("user.xml"));
//获取根标签
Element rootElement = document.getRootElement();
//获取根标签名
System.out.println(rootElement.getName());
System.out.println("2.--------------------->获取users的子标签列表");
//获取标签的子标签
List<Element> usersSubElementList = rootElement.elements();
for (Element userElement : usersSubElementList) {
System.out.println("users子标签的名字" + userElement.getName());
System.out.println("users子标签id的属性值" + userElement.attributeValue("id"));
System.out.println("users子标签country的属性值" + userElement.attributeValue("country"));
System.out.println("3.--------------------->获取user的子标签列表");
List<Element> userSubElementList = userElement.elements();
for (Element userSubElement : userSubElementList) {
System.out.println("user子标签的名字" + userSubElement.getName());
System.out.println("user子标签文本" + userSubElement.getText());
}
}
//获取users标签的第一个user标签
Element firstUserElement = rootElement.element("user");
//获取users标签的第一个user标签的子标签的文本
String password = firstUserElement.elementText("password");
System.out.println("users标签的第一个user标签的子标签的文本" + password);
}
}
Xpath可以使用路径表达式来选取XML文档中的元素或者属性节点,节点是沿着路径来选取的。
XPath官方文档:https://zvon.org/xxl/XPathTutorial/General_chi/examples.html
dom4j集成XPath
1.定义版本
<jaxen.version>1.2.0</jaxen.version>
2.添加依赖管理
<dependencyManagement>
<dependencies>
<!-- https://mvnrepository.com/artifact/jaxen/jaxen -->
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>${jaxen.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
3.添加依赖
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
</dependency>
dom4j提供基于XML的API
Document/Element关于XPath的api
Node selectSingleNode(String xpathExpression);
//根据XPath表达式获取单个标签
List<Node> selectNodes(String xpathExpression);
//根据XPath表达式获取多个标签
Xpath的语法
public class Dom4jXPathParseUserXmlTest {
public static void main(String[] args) throws DocumentException {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(Dom4jXPathParseUserXmlTest.class.getClassLoader().getResource("user.xml"));
//第一个用户的密码
System.out.println("1.------------>使用绝对路径查找元素");
Element element = (Element)document.selectSingleNode("users/user/password");
String password = element.getText();
System.out.println("第一个用户的的密码是"+password);
System.out.println("2.------------>使用相对路径查找元素");
Element element1 = (Element)element.selectSingleNode("../salary");
System.out.println("第一个用户的薪水区间"+element1.getText());
System.out.println("3.------------>使用全文搜索查找元素");
System.out.println("获取所有ID元素的文本");
List<Node> idNodeList = document.selectNodes("//id");
for (Node node : idNodeList) {
Element idElement = (Element) node;
System.out.println(idElement.getText());
}
System.out.println("4.------------>使用条件筛选查找元素");
System.out.println("获取user id属性为TB10002的用户信息");
Element S10001IdElement = (Element)document.selectSingleNode("//user[@id = 'S10001']");
List<Element> elementList = S10001IdElement.elements();
for (Element usersubElement : elementList) {
System.out.println("user子标签的名称" + usersubElement.getName());
//getText去除空格
System.out.println("user子标签的文本" + usersubElement.getText());
}
}
}