• 使用dom4j解析XML


    使用dom4j解析xml的步骤

    1.定义版本 <dom4j.version>2.1.3</dom4j.version>
    2.添加依赖管理
    3.添加依赖

    使用dom4j解析usr.xml

    1.创建解析器对象
    2.使用解析器对象读取XML文档生成Document对象
    3.根据Document对象获取XML的元素(标签)信息

    Dom4j重要的API说明
    org.dom4j.Document常用方法

      Element rootElement = document.getRootElement();//获取根标签
    
    • 1

    org.dom4j.Element的常用方法

       String getName();//获取标签名
        List <Elements> elements()//获取标签的子标签
        String attributeValue(String name);//获取指定属性名称的属性值
        String getText();//获取标签文本
        String elementText(String name);//获取指定名称的子标签的文本
    
    • 1
    • 2
    • 3
    • 4
    • 5
    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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    dom4j结合XPath解析XML

    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.添加依赖

    <dependency>
        <groupId>jaxen</groupId>
        <artifactId>jaxen</artifactId>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4

    dom4j提供基于XML的API
    Document/Element关于XPath的api

       Node selectSingleNode(String xpathExpression);
     //根据XPath表达式获取单个标签
       
       List<Node> selectNodes(String xpathExpression);
        //根据XPath表达式获取多个标签
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Xpath的语法

    • 绝对路径方式,以/开头的路径表示绝对路径,绝对路径是从根元素开始写。例如/元素/子元素/子子元素…
    • 相对路径方式,相对于当前节点的元素继续查找的节点,不以/开头,…/表示上一个元素
    • 全文搜索路径方式:列入//子元素,//子元素//子子元素,//子元素/子子元素
      //表示无论中间有多少层,直接获取所有子元素所满足条件的元素
      /表示只找一层
    • 谓语(条件筛选)形式 例如//元素[@attr1=‘value’]
    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());
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
  • 相关阅读:
    使用es实现轻量级分布式锁
    Unity3D学习笔记12——渲染纹理
    零基础入门篇①⑥ Python可变序列类型--字典
    字符设备模块实现进程间通信组件
    Go 面向对象(方法)
    图片怎么转换成pdf?
    Windows 安装DotNet Core运行时库
    PV操作经典例题
    Linux基本指令(中)
    C语言 | Leetcode C语言题解之第50题Pow(x,n)
  • 原文地址:https://blog.csdn.net/weixin_46429649/article/details/125544553