使用 dom4j + xpath 解析 xml 文件
程序员文章站
2022-05-28 21:05:03
...
package com.bjpowernode;
/*
dom4j + xpath 对xml文件中的节点进行快速定位
现代的框架大部分都是采用 dom4j + xpath 来解析 xml 文件的
注意:使用 xpath 的话,除了dom4j jar 包,还需导入 jaxen jar 包,因为 jaxen 是 xpath 专门的组件
xpath :
什么是 xpath ?
xpath 和正则表达式有点像,但不是一个东西,只是有点类似。
正规表达式:作字符模式匹配
xpath :作路径匹配
使用 xpath ,可以让 dom4j 快速的定位到要找的标签,这样可以大大提升 xml 文件解析的效率。
*/
// 常用的 xpath:
//1. /AAA 查找根节点AAA
//2. /AAA/CCC 查找CCC节点,要求CCC节点的父节点是AAA节点,且AAA节点是根节点
//3. /AAA/DDD/BBB 查找BBB节点,要求BBB节点的父节点是DDD节点,DDD节点的父节点是AAA节点,且AAA节点是根节点
//4. //BBB 查找所有的BBB节点
//5. //DDD/BBB 查找所有的BBB节点,要求BBB节点的父节点是DDD节点
//6. /AAA/CCC/DDD/* 查找根节点AAA下的CCC节点下的DDD节点下的所有节点
//7. /*/*/*/BBB 查找根节点下的所有节点下的所有节点下的所有节点下的BBB节点(注意有3层所有,层级不能错)
//8. //* 查找所有的节点
//9. /AAA/BBB[1] 查找AAA节点下的BBB节点下的第一个节点
//10. /AAA/BBB[Last()] 查找AAA节点下的BBB节点下的最后一个节点
//11. //@id 查找所有节点的id属性
//12. //BBB[@id] 查找所有具有id属性的BBB节点
//13. //BBB[@name] 查找所有具有name属性的BBB节点
//14. //BBB[@*] 查找所有具有属性的BBB节点
//15. //BBB[not(@*)] 查找所有不具有属性的BBB节点
//16. //BBB[@id='b1'] 查找所有具有id属性且属性值为b1的BBB节点
//17. //BBB[@name='bbb'] 查找所有具有name属性且属性值为bbb的BBB节点
//18. //BBB[@name=' bbb '] 查找所有具有name属性且属性值为 bbb 的BBB节点(注意 bbb 左右各有一个空格)
//19. //BBB[normalize-space(@name)='bbb'] normalize-space的作用是忽略空格,可以将以上两个一起查询出来
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.net.URISyntaxException;
//使用 dom4j + xpath 解析 xml 文件
//取出 db.xml 文件在的 pass 值
public class Test04 {
public static void main(String[] args) {
//1.创建SAXReader对象
SAXReader saxReader = new SAXReader();
try {
//2.提供需要读取的文件的路径
String path = Thread.currentThread().getContextClassLoader().getResource("XML/db.xml").toURI().getPath();
//3.调用read方法读取文件
Document document = saxReader.read(new File(path));
//4.通过 path 获取节点
String xpath = "/properties/property/pass";
//5.通过 selectSingleNode 方法获取一个节点(需要强制类型转换)
Element element = (Element) document.selectSingleNode(xpath);
//6.输出查看效果
System.out.println(element.getName() +"="+ element.getText());
//7.控制台输出结果为 pass=root
} catch (URISyntaxException e) {
System.out.println("文件路径不正确,文件读取失败!");
} catch (DocumentException e) {
System.out.println("IO异常,文件读取失败!");
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<properties id="jdbc" name="jdbc">
<property name="mysql">
<driver>com.mysql.cj.jdbc.Driver</driver>
<url>jdbc:mysql://localhost:3306/mydb?characterEncoding=utf8&useSSL=false&serverTimezone=UTC</url>
<user>root</user>
<pass>root</pass>
</property>
<property name="druid">
<initialSize>10</initialSize>
<minIdle>10</minIdle>
<maxActive>20</maxActive>
<maxWait>6000</maxWait>
</property>
</properties>
上一篇: 使用dom4j处理XML
下一篇: 腰果热量高吗,你了解的腰果是这样的吗