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
當前節點的內容:女

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM