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
    当前节点的内容:女
  • 相关阅读:
    常用数列
    sqrt
    树状数组
    hash
    P1102 A-B数对
    codevs 1795 金字塔 2
    P2296 寻找道路
    [USACO16JAN]子共七Subsequences Summing to Sevens
    P3397 地毯
    关于调用&&传址
  • 原文地址:https://www.cnblogs.com/zuge/p/6552953.html
Copyright © 2011-2022 走看看