`

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  
  学习了...

相关推荐

    Dom4j遍历解析XML

    Dom4j遍历解析XMLDom4j遍历解析XML

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

    此方法解析xml时,不受xml层级的限制。文件中包含了说明文档,java类,以及所使用到的*.jar。并对代码做了注释让你一目了然……

    处理及遍历XML文档DOM元素属性及方法整理

    用于处理XML文档的DOM元素属性 代码如下: childNodes:返回当前元素所有子元素的数组... 用于遍历XML文档的DOM元素方法 代码如下: getElementById(id)(document):获取有指定唯一ID属性值文档中的元素; getElementsByT

    Dom4j对Java xml文件的操作

    Dom4j对Java xml文件的操作。对节点的增删改查,把字符串读成XML,循环遍历节点!附带所要用的jar包,还有说明!

    dom4j-jdom封装和解析例子

    * Dom4j(SAX)读取xml数据(解析) * @param params * @throws Exception */ private static List&lt;Pois&gt; getReaderXml(String flg) throws Exception{ String fromRead=Dom4jTest2.class.getClassLoader...

    使用dom4j读写XML文档

    使用dom4j读写XML文档 1.获取文档的根节点. Element rootElm = document.getRootElement(); 2.取得某节点的单个子节点. Element memberElm=root.element("member");// "member"是节点名 3.取得节点的文字 String ...

    Xml的递归遍历

    用java递归dom解析器解析遍历Xml文档

    Java XML文件操作类:Dom4jHelper源文件下载.rar

    Java XML文件操作类:Dom4jHelper源代码文件下载,实现的功能:解析url xml文档,遍历解析文档,遍历解析元素,解析文件,获得根元素,修改xml某节点的值,输出文件路径及文件名 如果输出文件为null,则默认为原xml文件,...

    Java实现用DOM文档和XML文件互换的操作

    利用DOM规范,可以实现DOM文档和XML之间的相互转换,遍历、操作相应DOM文档的内容。可以说,要自由的操纵XML文件,就要用到DOM规范。DOM文档中的逻辑结构可以用节点树的形式进行表述。通过对XML文件的解析处理,XML...

    java解析xml及4种常用解析比较

    JDOM对于大多数Java/XML应用程序来说当然是有用的,并且大多数开发者发现API比DOM容易理解得多。JDOM还包括对程序行为的相当广泛检查以防止用户做任何在XML中无意义的事。然而,它仍需要您充分理解XML以便做一些超出...

    Java Dom4jHelper.java XML操作类下载.rar

    Java Dom4jHelper.java XML文件操作类下载,可实现解析xml文档,遍历文档,遍历解析元素,获得根元素,修改xml某节点的值,输出文件路径及文件名,将xml转换为字符串,字符串转换为文档等功能。

    Xml 文件处理 java

    自己写的一个XML文件处理,通过DOM4J,实现了逐一遍历整个XML文件,直到找到找到需要修改节点,退出程序,这个代码里面只调试了updatesinglenodevalue这一个函数,其他要用,自己调试,这个工程不需更改就可以使用,...

    xml入门 解析与创建 入门练习

    需要在lib下拷入dom4j包,jdom.jar包。路径需要自己改。四种方式解析创建xml文件,原始的遍历xml,以及一般运用读取,更新xml。

    java解析xml之dom解析xml示例分享

    DOM将整个XML文件加载到内存中,并构建出节点树;应用程序可以通过遍历节点树的方式来解析XML文件中的各个节点、属性等信息;这种方式便于对XML节点的添加修改等,而且解析也很方便,然后它比较耗费内存,解析速度也...

    PULL解析xml的demo

    通用性强,它会将XML文件的所有内容读取到内存中,然后使用DOM API遍历XML树、检索所需的数据; 优点:简单直观,但需要将文档读取到内存, 缺点:并不太适合移动设备; 2,SAX SAX是一个解析速度快并且占用内存少的...

    Java中四种XML解析技术

    DOM 解析器把 XML 文档转化为一个包含其内容的树,并可以对树进行遍历。用 DOM 解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用navigation APIs访问所需的树节点来完成任务。可以很容易的添加和...

    XML+DOM+解析和生成+教程

    XML+DOM+解析和生成+教程 - 本资源是一个XML的教程,教你如何用Java的DOM技术解析和生成XML文档,包括创建和遍历节点,修改和删除属性,添加和删除元素等。

    XML必知必会:Java、C#、Python多种语言解析XML文档

    XML是所有软件开发人员都应该熟悉的...DOM4J概述、示例:遍历节点、示例:插入节点、示例:删除节点 第9章 Python语言解析XML ElementTree模块概述、示例:遍历节点、示例:插入节点、示例:删除节点 第10章 C#语言

    XML解析工具

    读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API...这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。

Global site tag (gtag.js) - Google Analytics