zoukankan      html  css  js  c++  java
  • Dom4j解析xml文件-递归遍历所有节点和属性

       Dom4j是Java中常用读取xml文件的工具,就方便性和性能方面,一定程度要优于JDK中Domcument和SAX解析的,感兴趣的童鞋可以看看这篇文章 java解析XML的四种方式及比较,下边我就分享一下用Dom4j对xml文件进行遍历,一看代码就明白了,注释的很详细。

    被测试的xml文件test.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
        <user editor="chenleixing" date="2015-02-15">
            <name>张三</name>
            <year>24</year>
            <sex></sex>
        </user>
        <user editor="zhangxiaochao" date="2015-02-15">
            <name>李四</name>
            <year>24</year>
            <sex></sex>
        </user>
    </root>

    创建File,获取根节点

            /**
         * 从指定节点开始,递归遍历所有子节点
         * @author chenleixing
         */
        public void getNodes(Element node){
            System.out.println("--------------------");
            
            //当前节点的名称、文本内容和属性
            System.out.println("当前节点名称:"+node.getName());//当前节点名称
            System.out.println("当前节点的内容:"+node.getTextTrim());//当前节点名称
            List<Attribute> listAttr=node.attributes();//当前节点的所有属性的list
            for(Attribute attr:listAttr){//遍历当前节点的所有属性
                String name=attr.getName();//属性名称
                String value=attr.getValue();//属性的值
                System.out.println("属性名称:"+name+"属性值:"+value);
            }
            
            //递归遍历当前节点所有的子节点
            List<Element> listElement=node.elements();//所有一级子节点的list
            for(Element e:listElement){//遍历所有一级子节点
                this.getNodes(e);//递归
            }
        }

    从指定节点开始,递归遍历所有节点和属性

            /**
         * 从指定节点开始,递归遍历所有子节点
         * @author chenleixing
         */
        public void getNodes(Element node){
            System.out.println("--------------------");
            
            //当前节点的名称、文本内容和属性
            System.out.println("当前节点名称:"+node.getName());//当前节点名称
            System.out.println("当前节点的内容:"+node.getTextTrim());//当前节点名称
            List<Attribute> listAttr=node.attributes();//当前节点的所有属性的list
            for(Attribute attr:listAttr){//遍历当前节点的所有属性
                String name=attr.getName();//属性名称
                String value=attr.getValue();//属性的值
                System.out.println("属性名称:"+name+"属性值:"+value);
            }
            
            //递归遍历当前节点所有的子节点
            List<Element> listElement=node.elements();//所有一级子节点的list
            for(Element e:listElement){//遍历所有一级子节点
                this.getNodes(e);//递归
            }
        }

    输出结果

    --------------------
    当前节点名称:root
    当前节点的内容:
    --------------------
    当前节点名称:user
    当前节点的内容:
    属性名称:editor属性值:chenleixing
    属性名称:date属性值:2015-02-15
    --------------------
    当前节点名称:name
    当前节点的内容:张三
    --------------------
    当前节点名称:year
    当前节点的内容:24
    --------------------
    当前节点名称:sex
    当前节点的内容:男
    --------------------
    当前节点名称:user
    当前节点的内容:
    属性名称:editor属性值:zhangxiaochao
    属性名称:date属性值:2015-02-15
    --------------------
    当前节点名称:name
    当前节点的内容:李四
    --------------------
    当前节点名称:year
    当前节点的内容:24
    --------------------
    当前节点名称:sex
    当前节点的内容:女
  • 相关阅读:
    JVM致命错误日志(hs_err_pid.log)解读
    ant+proguard签名打包 .jar
    ProGuard之——代码混淆
    Java代码加密与反编译(二):用加密算法DES修改classLoader实现对.class文件加密
    利用Ant与Proguard混淆
    Ant在Java项目中的使用(一眼就看会)
    Native2Ascii文件转换 -- 待完善
    scp 的时候提示WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
    logback与log4j比较
    腾讯、百度、阿里面试经验—(3)阿里面经
  • 原文地址:https://www.cnblogs.com/zuge/p/6552953.html
Copyright © 2011-2022 走看看