`

java利用dom4j递归输出所有节点

阅读更多

test.xml文件

<?xml version="1.0" encoding="GBK"?> 
<doc> 
    <person> 
        <name>某人</name> 
        <adds>             
            <add ID="10002"> 
                <BS>10002</BS> 
                <note>南昌市</note> 
            </add> 
            <add ID=""> 
                <BS>10002</BS> 
                <note>空ID节点啊</note> 
            </add> 
            <add> 
                <BS>10002</BS> 
                <note>空ID节点啊</note> 
            </add> 
      <add ID="10001"> 
          <note>深圳市</note> 
      </add> 
  </adds> 
    </person> 
    <other> 
        <name ID="HEHE">其它节点</name> 
    </other> 
</doc> 

 Leaf.java

package com.lushuifa.dom;

public class Leaf {
	private String xpath;// 
	private String value;
	private String domName;

	public String getDomName() {
		return domName;
	}

	public void setDomName(String domName) {
		this.domName = domName;
	}

	public Leaf(String xpath, String value,String domName) {
		this.xpath = xpath;
		this.value = value;
		this.domName = domName;
	}

	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;
	}
}

 DomUtil.java文件代码

package com.lushuifa.dom;

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 DomUtil {
	
	
	public Document readXML() {  
        Document document = null;  
        SAXReader saxReader = new SAXReader();  
        try {  
            document = saxReader.read("F:\\testSpace\\Dom4jTest\\src\\test.xml");  
        } catch (DocumentException e) {  
            e.printStackTrace();  
        }  
        return document;  
    }  
	
	 /** 
     * 获取根元素 
     * 
     * @return 
     * @throws DocumentException 
     */ 
    public Element getRootElement(){ 
        try {
			Document srcdoc = this.readXML(); 
			Element elem = srcdoc.getRootElement(); 
			return elem;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null; 
    } 

    /** 
     * 递归遍历方法 
     * 
     * @param element 
     */ 
    public List<Leaf> getElementList(Element element,ArrayList<Leaf> elemList) { 
        List elements = element.elements(); 
        if (elements.size() == 0) { 
            //没有子元素 
            String xpath = element.getPath(); 
            String value = element.getTextTrim(); 
            String domName = element.getName();
            elemList.add(new Leaf(xpath, value,domName)); 
        } else { 
            //有子元素 
            for (Iterator it = elements.iterator(); it.hasNext();) { 
                Element elem = (Element) it.next(); 
                //递归遍历 
                getElementList(elem,elemList); 
            } 
        }
        return elemList;
    }
    

    public String getListString(List<Leaf> elemList) { 
        StringBuffer sb = new StringBuffer(); 
        for (Iterator<Leaf> it = elemList.iterator(); it.hasNext();) { 
            Leaf leaf = it.next(); 
            sb.append(leaf.getXpath()).append(" = ").append(leaf.getValue()).append("\n"); 
        } 
        return sb.toString(); 
    } 
    
    public static void main(String[] args) {
    	DomUtil domUtil = new DomUtil();
    	System.out.println("得到document对象是:"+domUtil.readXML());;
    	Element rootElement =  domUtil.getRootElement();
    	List<Leaf> list = domUtil.getElementList(rootElement,new ArrayList<Leaf>());
    	System.out.println("list=="+list);
    	for (Leaf leaf : list) {
			 System.out.println("节点路径:"+leaf.getXpath());
			 System.out.println("节点名称:"+leaf.getDomName());
			 System.out.println("节点值:"+leaf.getValue());
		}
	}
} 

 测试结果:

节点路径:/doc/person/name

节点名称:name

节点值:某人

节点路径:/doc/person/adds/add/BS

节点名称:BS

节点值:10002

节点路径:/doc/person/adds/add/note

节点名称:note

节点值:南昌市

节点路径:/doc/person/adds/add/BS

节点名称:BS

节点值:10002

节点路径:/doc/person/adds/add/note

节点名称:note

节点值:空ID节点啊

节点路径:/doc/person/adds/add/BS

节点名称:BS

节点值:10002

节点路径:/doc/person/adds/add/note

节点名称:note

节点值:空ID节点啊

节点路径:/doc/person/adds/add/note

节点名称:note

节点值:深圳市

节点路径:/doc/other/name

节点名称:name

节点值:其它节点

分享到:
评论

相关推荐

    dom4j解析 递归

    **DOM4J解析递归详解** DOM4J是Java中一个强大的XML处理库,它提供了丰富的API用于XML的解析、创建、操作以及遍历。在处理复杂的XML文档时,经常需要用到递归方法来深入到XML的各个层级进行访问。本文将深入探讨DOM...

    dom4j 解析(读取) xml 节点数据

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了简单而直观的方式来解析、创建、修改和操作XML数据。在本教程中,我们将深入探讨如何使用DOM4J解析(读取)XML节点数据,不受XML层级的限制。 首先,确保你...

    dom4j--java框架技术

    **DOM4J——Java框架技术详解** DOM4J是一个强大的Java XML处理库,它提供了全面的XML解决方案,包括解析、生成、操作和序列化XML文档。DOM4J因其易用性和高性能,在Java开发者中广受欢迎,是许多Java框架如Spring...

    dom4j jar包

    DOM4J是一款强大的Java XML处理库,它提供了全面且高效的XML解决方案,包括解析、操作和序列化XML文档的功能。在Java开发中,DOM4J作为一个轻量级的库,被广泛用于处理XML文档,其易用性和灵活性使其成为开发者们的...

    dom4j的使用方法和api还有递归算法

    DOM4J是一个强大的Java库,用于处理XML文档。它提供了灵活、高效且功能丰富的API,使得XML解析、创建、修改和遍历变得简单。在本文中,我们将深入探讨DOM4J的使用方法、API以及如何结合递归算法来处理XML数据。 ...

    dom4j-1.6.1及相关使用示例

    **DOM4J详解及其在Java中的应用** DOM4J是一个非常优秀的Java XML API,它提供了丰富的功能,使得处理XML文件变得简单而高效。这个库不仅仅是一个DOM实现,它还包含了SAX和DOM的支持,以及一些其他的特性,如XPath...

    dom4j从基础到精通

    解析 XML 文件后,可以通过递归遍历 Document 对象构建 dom4j 树。 2. 获取节点 `Element` 对象提供了多种获取子节点的方法,如 `elementIterator()`, `elements()`, `childElement()` 等。 3. 获取属性 通过 `...

    dom4j实战(一)——使用dom4j从XML中读取数据源配置

    这篇名为"dom4j实战(一)——使用dom4j从XML中读取数据源配置"的博客文章将深入探讨如何利用DOM4J从XML文件中读取数据源配置。 首先,我们需要理解DOM4J的基本概念。DOM4J是基于DOM模型的,DOM(Document Object ...

    dom4j自动解释xml文件

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得解析、创建、修改XML文件变得简单。在这个主题中,我们将深入探讨DOM4J如何递归地解析XML文件,并将解析结果映射到动态bean或Map中。 ...

    dom4j读取Excel内容

    在IT行业中,DOM4J是一个流行的Java库,用于处理XML文档。然而,它不仅可以用于XML,还可以用于读取和操作Excel文件,这在处理数据导入、导出或数据分析时非常有用。这篇博客“dom4j读取Excel内容”可能探讨了如何...

    使用dom4j将xml字符串转换成Bean对象

    当我们需要将XML字符串解析并映射到Java Bean对象时,dom4j是一个常用的库。本篇文章将详细探讨如何使用dom4j库实现这个过程。 首先,dom4j是一个强大的Java XML API,它提供了丰富的功能,如读取、写入、修改和...

    使用递归和dom遍历dom树形结构

    通过递归遍历DOM树形结构是一种有效且直观的方式,可以确保所有节点被正确地访问和处理。上述Java示例展示了如何实现这一点,并且可以根据实际需求进行扩展和定制。这种方法不仅适用于XML文档的解析,还可以应用于...

    通过Dom4j创建和读取xml文件下载

    本教程将详细讲解如何利用DOM4J进行XML文件的创建和读取。首先,我们需要了解DOM4J的核心概念,如Element、Attribute、Document等。 1. **DOM4J基本概念**: - **Document**: XML文档的根节点,代表整个XML文件。 ...

    dom4j面向对象解析xml

    在本文中,我们将深入探讨DOM4J如何实现XML的面向对象解析,以及如何利用递归算法处理XML结构。 一、DOM4J基本概念 DOM4J的核心是基于树形结构的Document对象,它代表了整个XML文档。在这个结构中,Element表示XML...

    dom4j解析xml嵌套格式

    DOM4J还支持XPath表达式,用于快速定位XML中的特定节点。例如,`document.selectNodes("//element[@attr='value']")`将返回所有满足条件的元素。 总结,DOM4J为处理XML提供了强大的工具,无论是解析、遍历、修改...

    Android 创建与解析XML Dom4j方式

    通过以上步骤,你可以在Android应用中有效地创建和解析XML文档,利用Dom4j库的优势,提高代码的可读性和灵活性。注意在实际开发中,根据具体需求进行优化,例如处理错误、解析复杂结构的XML等。

    dom4j官方jar包+API

    4. **遍历XML**:利用迭代器或递归方法,可以轻松遍历XML文档的所有节点。 5. **序列化**:将Document对象写回XML文件,或者将其转换为字符串形式。 6. **事件处理**:DOM4J支持SAX事件模型,允许在解析过程中执行...

    dom4j+反射,面向对象方式的xml格式转换

    我们可以创建一个User类,包含id、name和age字段,然后用DOM4J解析XML,通过反射创建User对象并设置属性。这个过程可以封装成一个通用的方法,以适应不同结构的XML数据转换。 总之,DOM4J提供了强大且易用的工具来...

    Dom4j 使用指南.rar

    Dom4j 是一个非常流行的Java库,用于处理XML文档。它提供了灵活、高效的方式来解析、创建、操作XML内容。对于学习XML的开发者来说,Dom4j是一个不可多得的工具,因为它的API简洁易用,功能强大。本指南将深入介绍Dom...

Global site tag (gtag.js) - Google Analytics