欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用 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&amp;useSSL=false&amp;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>

相关标签: Spring xml xpath