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

在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

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

’ 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值