zoukankan      html  css  js  c++  java
  • dom4j

    依赖jar:

    1、自定义文件

    <?xml version="1.0" encoding="utf-8" ?>
    <Root>
        <user id="001">
            <admin name="onepa">
                <name id="ceId" yong="yes">fred</name>
                <password>150150</password>
                <age>22</age>
            </admin>
            <admin>
                <name>yucai</name>
                <password>123456</password>
                <age>21</age>
            </admin>
        </user>
    </Root>

    2、demo类

    package com.demo.dom4j;
    
    import org.dom4j.*;
    
    import org.dom4j.io.SAXReader;
    
    import java.io.File;
    import java.util.List;
    
    /**
     * 1.注意防止XXE注入攻击
     * 2.获取标签属性值时,分两种情况
     *      如果为Element对象实例时
     *          1.attributes()方法
     *          2.selectSingleNode("@name").getText(),该方法需要注意.selectSingleNode("@name")不为空,即确保用name属性可以选中该元素。
     *      如果为Node对象的实例时:
     *          1.selectSingleNode("@name").getText(),该方法需要注意.selectSingleNode("@name")不为空,即确保用name属性可以选中该元素。
     */
    public class Test
    {
        public static void main(String[] args)
        {
            readXML01();
            readXML02();
        }
    
        /***
         * dom4j 1.6版本集成了jaxen组件
         * 解析xml文件,直接定位到需要选择的节点
         *  dom4j 2.10版本,jdk版本1.8
         *  jaxen.jar
         */
        private static void readXML01()
        {
            // 需要解析的xml文件
            String path = "F:\java-demo\java-demo\src\com\demo\dom4j\info.xml";
            File file = new File(path);
            // xml解析对象
            SAXReader reader = new SAXReader();
            // dom4j中的文档对象模型
            Document document = null;
    
            try
            {
                // 将需要解析的xml文件转换成dom4j中的文档对象模型
                document = reader.read(file);
    
                // 使用dom4j解析XML时,要快速获取某个节点的数据,使用XPath是个不错的方法,需要jaxen.jar包支持.需要解析的节点路径,路径由xml文件中的标签组成
                // 该路径包含两种情况:1.该节点下面还有子节点。2.该节点下无子节点
                String pathBq = "Root/user/admin/name";
                List<Node> nodeList = document.selectNodes(pathBq); // 根据节点路径定位节点,Node为dom4j中的类
                for(Node node : nodeList)
                {
                    System.out.println("*******************************************");
                    // 当xpath下无子节点时,getText()和getStringValue()返回值一样
                    System.out.println("标签名称:"+node.getName());
                    System.out.println("标签元素值:"+node.getText());
                    System.out.println("标签下所有子标签元素值:"+node.getStringValue());
    
                    // 判断当前节点是否可以通过属性值yong选中,即判断当前节点是否具有yong属性。
                    if (null != node.selectSingleNode("@yong"))
                    {
                        System.out.println("该标签有yong属性,其值为:"+node.selectSingleNode("@yong").getText());
                    }
                }
            }
            catch (DocumentException e)
            {
                e.printStackTrace();
            }
        }
    
        /***
         * 多级父元素属性值的获取
         */
        private static void readXML02()
        {
            String path = "F:\java-demo\java-demo\src\com\demo\dom4j\info.xml";
            File file = new File(path);
            SAXReader reader = new SAXReader();
            Document document = null;
            try
            {
                document = reader.read(file);
                String pathBq = "Root/user/admin/name";
                List<Node> nodeList = document.selectNodes(pathBq);
                for(Node node : nodeList)
                {
                    System.out.println("************************************");
                    Element oneparent = node.getParent();// 获取节点的父元素
                    Element twoparent = node.getParent().getParent();//获取元素的父元素
                    System.out.println("一级父元素标签名:"+oneparent.getName());
                    List<Attribute> attributes = oneparent.attributes();// 父元素的所有属性值
                    for (Attribute temp : attributes)
                    {
                        System.out.println("属性名称:"+temp.getName());
                        System.out.println("属性值:"+temp.getValue());
                    }
                    System.out.println("二级父元素标签名:"+twoparent.getName());
                }
            }
            catch (DocumentException e)
            {
                e.printStackTrace();
            }
        }
    }

      

  • 相关阅读:
    信息安全系统设计基础实验三报告
    信息安全系统设计基础第十二周学习总结
    信息安全系统设计基础实验二报告
    信息安全系统设计基础第十一周学习总结
    家庭作业汇总
    信息安全系统设计基础实验一报告
    信息安全系统设计基础第十周学习总结
    第十章家庭作业
    20182319彭淼迪第一周学习总结
    java预备作业
  • 原文地址:https://www.cnblogs.com/nevegiveup/p/8688994.html
Copyright © 2011-2022 走看看