关于‘Dom4j递归遍历XML所有元素 ’的一点看法

来源:互联网 发布:文章演技 知乎 编辑:程序博客网 时间:2024/05/22 22:32

在google和百度上搜索关键词 Dom4J XML 和递归后,出现了很多都是以‘Dom4J递归遍历XML所有的元素’。貌似很是吸引想我这样的初学者。然后我就很兴奋的一顿狂敲代码。然后还自己测试呢。先看看代码吧。

<?xml version="1.0" encoding="GBK"?> <doc>     <person id="1" sex="m">         <name>zhangsan</name>         <age>32</age>         <adds>             <add code="home">home add</add>             <add code="com">com add</add>         </adds>     </person>     <person id="2" sex="w">         <name>lisi</name>         <age>22</age>         <adds>             <add ID="22" id="23" code="home">home add</add>             <add ID="23" id="22" code="com">com add</add>             <add id="24" code="com">com add</add>         </adds>     </person> </doc>

package learn.java;public class Leaf {     private String xpath;    private String value;     public Leaf(String xpath, String value) {         this.xpath = xpath;         this.value = value;     }     public String getXpath() {         return xpath;     }     public void setXpath(String xpath) {         this.xpath = xpath;     }     public String getValue() {         return value;     }     public void setValue(String value) {         this.value = value;     } }

package learn.java;import java.io.InputStream;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class Dom4JTest {@SuppressWarnings("unchecked")private static List elemList = new ArrayList(); @SuppressWarnings("unchecked")public void getElementList(Element element) {         List elements = element.elements();         if (elements.size() == 0) {             //没有子元素             String xpath = element.getPath();             String value = element.getTextTrim();             elemList.add(new Leaf(xpath, value));         } else {             //有子元素             for (Iterator it = elements.iterator(); it.hasNext();) {                 Element elem = (Element) it.next();                 //递归遍历                 getElementList(elem);             }         }     }  @SuppressWarnings("unchecked")public String getListString(List elemList) {         StringBuffer sb = new StringBuffer();         for (Iterator it = elemList.iterator(); it.hasNext();) {             Leaf leaf = (Leaf) it.next();             sb.append(leaf.getXpath()).append(" = ").append(leaf.getValue()).append("\n");         }         return sb.toString();     }/** * @param args * @throws DocumentException  */public static void main(String[] args) throws DocumentException {SAXReader reader=new SAXReader();InputStream in = Dom4JTest.class.getResourceAsStream("test.xml");         Document document = reader.read(in);        Element root = document.getRootElement();                Dom4JTest test=new Dom4JTest();        test.getElementList(root);        String x = test.getListString(elemList);                  System.out.println("-----------解析结果------------");         System.out.println(x); }}

这个就是网上的代码,所谓的可以遍历所有xml节点的程序。但是呢,测试运行结果却如下所示,

-----------解析结果------------/doc/person/name = zhangsan/doc/person/age = 32/doc/person/adds/add = home add/doc/person/adds/add = com add/doc/person/name = lisi/doc/person/age = 22/doc/person/adds/add = home add/doc/person/adds/add = com add/doc/person/adds/add = com add

自己跟测试数据比较后就可以看出,这段程序的功能,是遍历所有叶子节点,不是遍历所有节点。哎,总得来说,不管是自己写博客,还是为了增加人气,转载别的文章。做为一个科技工作者。最起码的认真精神和试验精神还是要有的嘛。不能一股脑的都转载,也不看内容和标题符合不符合。

’ 
原创粉丝点击