`

java 遍历xml dom4j

    博客分类:
  • Xml
阅读更多

 Java递归遍历XML所有元素

    做一个递归遍历XML的例子,为更为复杂的解析工作做基础。

    目标:遍历所有的元素节点,并且取出来其中的值,结果打印到控制台。

中国网管联盟www_bitscn_com


    源代码如下:
   
    本程序依赖DOM4j包。

 
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.DocumentException;
import org.dom4j.Element; feedom.net

import java.util.*;

54ne.com


/**
* Created by IntelliJ IDEA.<br>
* <b>User</b>: leizhimin<br>
* <b>Date</b>: 2008-4-14 14:02:12<br>
* <b>Note</b>: Java递归遍历XML所有元素
*/
public class XmlTest { //    private static Map<String, String> xmlmap = new HashMap<String, String>();
    //存储xml元素信息的容器
    private static List<Leaf> elemList = new ArrayList<Leaf>();

    //要测试的xml对象
    private static String srcXml = "<?xml version=\"1.0\" encoding=\"GBK\"?>\n" +
            "<doc>\n" +
            "    <person>\n" +
            "        <name>某人</name>\n" +
            "        <adds>            \n" +
            "            <add ID=\"10002\">\n" +
            "                <BS>10002</BS>\n" + 
            "                <note>西安市太白路</note>\n" +
            "            </add>\n" +
            "            <add ID=\"\">\n" +
            "                <BS>10002</BS>\n" +
            "                <note>空ID节点啊</note>\n" +
            "            </add>\n" + 
            "            <add>\n" +
            "                <BS>10002</BS>\n" +
            "                <note>空ID节点啊</note>\n" +
            "            </add>\n" +
            "\t\t\t<add ID=\"10001\">\n" +
            "\t\t\t\t<BS xmlns=\"10001\"/>\n" +
            "                <note>西安市太白路2</note>\n" + 54ne.com
            "            </add>\n" +
            "\t\t</adds>\n" +
            "    </person>\n" +
            "    <other>\n" +
            "        <name ID=\"HEHE\">ASDF</name>\n" +
            "    </other>\n" +
            "</doc>";


    public static void main(String args[]) throws DocumentException {
        XmlTest test = new XmlTest();
        Element root = test.getRootElement();
        test.getElementList(root);
        String x = test.getListString(elemList);


        System.out.println("-----------原xml内容------------");
        System.out.println(srcXml);
        System.out.println("-----------解析结果------------");
        System.out.println(x); 54ne.com

    } 54com.cn

    /**
     * 获取根元素
     *
     * @return
     * @throws DocumentException
     */
    public Element getRootElement() throws DocumentException {

       //SAXReader reader = new SAXReader();
     // Document srcdoc = reader.read(new File("src/com/xml/test/abc.xml"));
        Document srcdoc = DocumentHelper.parseText(srcXml);
        Element elem = srcdoc.getRootElement();
        return elem;
    }

 

    /**
     * 递归遍历方法
     *
     * @param element
     */
    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);
            }
        }
    }


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

    /**
    * xml节点数据结构
    */
class Leaf {
    private String xpath;         //
    private String value;

feedom.net

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


 

 

    运行结果:
-----------原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">
    <BS xmlns="10001"/>
                <note>西安市太白路2</note>
            </add>
  </adds>
    </person>
    <other>
feedom.net

        <name ID="HEHE">ASDF</name>
    </other>
</doc>
 

-----------解析结果------------

/doc/person/name = 某人
/doc/person/adds/add/BS = 10002
/doc/person/adds/add/note = 西安市太白路
/doc/person/adds/add/BS = 10002
/doc/person/adds/add/note = 空ID节点啊
/doc/person/adds/add/BS = 10002
/doc/person/adds/add/note = 空ID节点啊
/doc/person/adds/add/*[name()='BS'] =
/doc/person/adds/add/note = 西安市太白路2
/doc/other/name = ASDF

Process finished with exit code 0


feedom.net


    可以发现,有很多xpath相同的值域。

 

分享到:
评论
1 楼 sayloveme1314 2011-05-12  
  学习了...

相关推荐

    java解析XML dom4j dom4j-1.6.1.jar

    Java解析XML时,dom4j是一个非常流行的库,它提供了灵活且强大的API来处理XML文档。dom4j-1.6.1.jar是这个库的一个版本,发布于2005年,它支持XML的读取、写入、操作以及查询功能。在本文中,我们将深入探讨dom4j的...

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

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

    java操作xml dom dom4j sax jdom

    为了处理XML文档,Java提供了多种API,其中最常用的包括DOM、SAX、DOM4J和JDOM。以下是对这些方法的详细介绍: 1. DOM(Document Object Model) DOM是一种树形结构的API,它将整个XML文档加载到内存中,形成一个...

    xmldom4j解析

    DOM4J是Java中一个非常强大的XML处理库,它提供了丰富的API来操作XML文档,如读取、写入、修改以及查询XML。本教程将深入探讨XML DOM4J解析的相关知识点。 一、DOM4J基本概念 DOM4J是一种灵活的Java API,其设计...

    JAVA操作XMLDOM4j简单教程

    DOM4j是一个强大的Java库,专为处理XML文档而设计。它的易用性和高效性使其在众多XML处理API中脱颖而出。在本教程中,我们将深入探讨DOM4j的核心概念、主要接口以及如何使用它来读取、解析和操作XML文档。 首先,...

    xmldom4jxmldom4jxmldom4j

    XMLDOM4J是Java语言中处理XML文档的一个库,它提供了强大的XML解析、操作和转换功能。这个库基于DOM(Document Object Model)模型,但它的性能比标准的Java DOM实现要好,因为它优化了内存使用并提高了处理速度。在...

    DOM4J jar包 xml解析 所有的dom4j-1.6.1 dom4j-2.0.2 dom4j-2.1.1包 导入直接使用

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、修改和查询变得简单。DOM4J的名字来源于“Document Object Model for Java”,它采用面向对象的设计思想,提供了对...

    dom4j的Java工程

    此外,DOM4J还提供了方便的迭代器和集合接口,可以方便地遍历XML结构。 在"dom4jdemo"这个子文件夹中,很可能是包含了一个或多个Java源代码文件,演示了如何使用DOM4J进行XML操作的实例。这些代码通常会包含导入DOM...

    JAVA操作XMLDOM4j简单教程1

    Java 操作 XML 时,DOM4j 是一个强大的解析库,尤其因其易用性和高性能而受到欢迎。DOM4j 提供了对 XML、XPath 和 XSLT 的全面支持,并且完全融入了 Java 集合框架,使得在 Java 平台上处理 XML 数据变得简单。在 ...

    dom4j-java-API

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了简单且高效的API,使得开发者可以轻松地解析、创建、修改以及操作XML数据。在Java世界中,DOM4J是与DOM(Document Object Model)相媲美的一个选择,但它比...

    java中用dom4j读取xml

    为了处理XML文档,开发者通常会利用解析器,其中DOM4J是一个功能强大且灵活的Java库,专为处理XML、XPath和XSLT而设计。本文将深入探讨如何使用DOM4J库来读取XML文件。 首先,让我们理解DOM4J的基本概念。DOM4J是...

    遍历XML文件内所有节点和属性

    针对这一问题,"遍历XML文件内所有节点和属性"的非递归方法应运而生。 在描述中提到的“比递归调用的速度要快很多”,这通常是指通过迭代而非递归的方式遍历XML文档。递归方法会为每个节点创建新的函数调用栈,而当...

    java中dom4j读写XML

    在Java中,DOM4J提供了一种灵活的方式来操作XML文档,包括解析、遍历、修改节点以及序列化回XML字符串。 **DOM4J的基本概念:** 1. **Element(元素)**:XML文档中的每一个标签都是一个Element,它包含属性、文本...

    java 通过dom4j操作 xml

    Java中的DOM4J库是一个非常流行的XML处理工具,它提供了灵活且高效的API来解析、创建、修改和查询XML文档。DOM4J的名字来源于DOM(Document Object Model)和JDOM,它融合了两者的优势,提供了更丰富的功能和更好的...

    dom4j解析xml详解,包含源代码,dom4j.jar包

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了简单而灵活的API,使得在Java应用程序中读取、写入、修改以及查询XML变得容易。本篇将深入讲解DOM4J解析XML的原理与实践,同时提供相关源代码供参考。 一、...

    dom4j_XML.rar_DOM4J_dom4j xml java_java xml_读写xml

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、查询和修改变得简单易行。在Java世界中,XML是一种常见的数据交换格式,DOM4J作为XML处理工具,尤其适用于那些需要...

Global site tag (gtag.js) - Google Analytics