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