`

dom4j的讀操作

阅读更多

參考資料:http://blog.csdn.net/qking93415981/archive/2007/09/14/1785114.aspx
public class ReadXMLByDom {
    public static void main(String [] args) throws DocumentException{
        String str = "<diffgr><books><book id='1'><Name>Java</Name><price>100</price></book>";
        str = str + "<book id='2'><Name>Linux</Name><price>100</price></book></books></diffgr>";
        //獲取Document
        Document document = DocumentHelper.parseText(str);
        //查找需要遍歷的节点
        List list = document.selectNodes("/diffgr/books/book " );
        //遍历节点
        Iterator it = list.iterator();
        while(it.hasNext())
        {
            Element ftpElement = (Element)it.next();
            //取得該節點屬性值
            System.out.println("id屬性:"+ftpElement.attributeValue( " id " );)
            //取得需要的節點的值
            System.out.println("name="+ftpElement.element("Name").getText());
            System.out.println("price="+ftpElement.element("price").getText());
        }
    }
}
這樣,需要取什麽值,都可以指定。很方便。
這是dom4j最簡單的應用了

需要遍歷整個XML,可以參考如下
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.util.*;

public class TestSAX {
    //   private static Map<String, String> xmlmap = new HashMap<String,
    // String>();

    private static List<Leaf> elemList = new ArrayList<Leaf>();

    private static String srcXml =            
"<diffgr:diffgram xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" xmlns:diffgr=\"urn:schemas-microsoft-com:xml-diffgram-v1\">" +
            "<NewDataSet xmlns=\"\">" +
            "<Table diffgr:id=\"Table1\" msdata:rowOrder=\"0\">" +
            "<id>125704</id>" +
            "<l_name>&#x6211;&#x6688;</l_name>" +
            "<m1_number>8613574286112</m1_number>" +
            "<local_number>861052231235</local_number>" +
            "<m2_name>&#x6D77;&#xFF0C;&#x5C0F;&#x525B;</m2_name>" +
            "</Table>" +
            "<Table diffgr:id=\"Table2\" msdata:rowOrder=\"1\">" +
            "<id>124849</id><l_name>&#x6211;&#x6688;</l_name>" +
            "<m1_number>8613574286112</m1_number><local_number>" +
            "862151923508</local_number>" +
            "<m2_name>jerry217(Internet)</m2_name>" +
            "</Table>" +
            "<Table diffgr:id=\"Table6\" msdata:rowOrder=\"1\">" +
            "<id>124849</id>" +
            "<l_name>&#x6211;&#x6688;</l_name>" +
            "<m1_number>8613574286112</m1_number>" +
            "<local_number>862151923508</local_number>" +
            "<m2_name>jerry217(Internet)</m2_name><" +
            "/Table>" +
            "</NewDataSet>" +
            "</diffgr:diffgram>";

    public static void main(String args[]) throws DocumentException {
        TestSAX test = new TestSAX();
        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);         
    }

    /**
     * 获取根元素
     */
    public Element getRootElement() throws DocumentException {
        Document srcdoc = DocumentHelper.parseText(srcXml);
        Element elem = srcdoc.getRootElement();
        return elem;
    }

    /**
     * 递归遍历方法
     */
    public void getElementList(Element element) {
        List elements = element.elements();
        if (elements.size() == 0) {
            // 没有子元素
            System.out.println(element.getUniquePath());  //如果有相同屬性,會在屬性結尾加上“[數字]”進行標示
            String xpath = element.getPath();
            String value = element.getTextTrim();
            elemList.add(new Leaf(xpath, value));   //Leaf 僅僅是
        } 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;
    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;
    }
}

分享到:
评论

相关推荐

    dom4j读写xml文件

    DOM4J作为一个解析器,它的核心功能是将XML文档转换为一个可以被Java程序操作的对象树。 **XML读取** 1. **解析XML文件**:使用DOM4J的`DocumentHelper`类的`parseText()`或`parse()`方法,可以将XML文件加载为一...

    Dom4j_demo.rar_DEMO_dom4j de_dom4j demo_dom4j demo project_xml读

    标题"Dom4j_demo.rar_DEMO_dom4j de_dom4j demo_dom4j demo project_xml读"中包含了几个关键信息点:`Dom4j`、`demo`以及`xml读`。这表明这是一个关于使用Dom4j库进行XML读取操作的示例项目。`Dom4j`是Java中一个...

    dom4J解析XML 和jar包

    5. **命名空间处理**:对于包含命名空间的XML文档,DOM4J提供了便捷的方法来处理和操作这些命名空间。 6. **DOM4J与JAXB集成**:JAXB(Java Architecture for XML Binding)是Java提供的一个标准框架,用于在Java...

    DOM4J格式化XML

    DOM4J是一个非常流行的Java XML API,它提供了丰富的功能,包括读取、写入、修改以及操作XML文档。在XML处理中,格式化是一个重要的环节,它可以使得XML代码更加整洁、易读,便于理解和维护。 【描述】虽然描述部分...

    dom4j.jar,java xml

    4. **文档建模**:除了基本的节点操作,DOM4J还提供了元素、属性、文本、注释、处理指令等高级功能,使得构建和操作XML文档更加便捷。 5. **事件驱动**:DOM4J支持SAX事件驱动的解析,可以在解析过程中实时处理XML...

    XML DOM4J学习笔记

    DOM4J是Java中一个流行的XML处理库,它提供了灵活且功能强大的API来操作XML文档。本篇笔记将深入探讨XML DOM4J的学习要点。 一、XML基础知识 1. XML结构:XML文档由元素(Element)、属性(Attribute)、文本内容...

    使用DOM4j解析XML文件

    DOM4j作为一个开源的Java库,提供了强大的XML处理能力,能够帮助开发者快速解析和操作XML文档,极大地提高了开发效率。 #### DOM4j简介 DOM4j是基于Java的,一个灵活高效的XML处理库。它支持DOM、SAX和JDOM等API,...

    DOM4J解析XML代码

    DOM4J是一个强大的Java XML API,支持XML的读写、搜索、修改等功能,它通过SAXReader对象读取XML文档并将其转化为对象模型以便于操作。在处理大型XML文件时,也可以考虑使用SAX解析,尽管它需要额外的工作来管理事件...

    dom4j 读xml灰藏有用的jar包

    这篇名为“dom4j 读xml灰藏有用的jar包”的博客文章可能详细介绍了如何利用DOM4J来读取和操作XML文件,而“student.xml”可能是博主用于示例的一个XML文件。 在处理XML时,DOM4J主要有以下几个关键知识点: 1. **...

    DOM4J的读,写,创建XML文件操作

    使用DOM4J进行的一系列对XML文件的操作,包括读写,创建,同时注释出相关的常用的解析器,Document创建器

    读写超大类xml文件,使用dom4j读写xml文件的工具类

    基于dom4j的读写xml文件的工具包。封装了dom4j操作xml文档的常和方法。 支持两种读写方法。1:针对小文件的读取整个文档,2:针对大文件的,逐行读取。读到几百M文件毫无压力。

    JAVA 解析XML 的JAr包 DOM4j.Jar JDOM.jar

    DOM4j是一个灵活且功能强大的Java XML API,它提供了全面的XML处理解决方案,包括读取、写入、操作和转换XML文档。DOM4j的核心特性是基于DOM模型,但同时融入了SAX和DOM的优点,使其在处理大型XML文件时具有更好的...

    dom4j解析struts.xml需要的包装类

    `dom4j`是一个强大的Java XML API,它提供了一种灵活的方式来读取、写入、修改以及操作XML文档。在解析`struts.xml`时,dom4j能帮助我们高效地遍历XML节点,获取或设置属性值,以及创建对象模型来表示配置文件的结构...

    dom4j解析

    DOM4J的源码清晰易读,对于学习XML处理的原理和最佳实践非常有价值。通过阅读和理解DOM4J的源码,开发者可以更好地掌握XML处理的细节。 总结,DOM4J是一个强大而灵活的XML处理库,无论是在小型项目还是大型企业...

    java 操作xml 源码(包括dom dom4j 读写XML)

    操作方式包括:dom和dom4j dom是W3C规范,比较典型的JAVA操作XML方式,适用于小型文件。 dom4j是开源的性能以及效率最好的,也是一个典型例子。 本源码下下来运行test.java直接运行。 其中包括:采用dom写xml 以及...

    jdom&dom4j.zip

    DOM4J的API则更为强大,适合复杂的XML操作和集成。 - **性能**:两者性能相近,但在大型XML文档处理时,DOM4J的延迟加载策略可能更具优势。 - **功能**:DOM4J提供了XPath支持,而JDOM相对较弱,这使得DOM4J在查询和...

    dom4j帮助文档 网页版

    DOM4J的API更加面向对象,使得代码更易读、易写,而标准的Java DOM API则相对复杂,且内存消耗较大。 **使用DOM4J进行XML操作实例** 1. 解析XML文件: ```java SAXReader reader = new SAXReader(); Document ...

    dom4j从基础到精通.docx

    #### 四、使用 DOM4j 修改 XML 文件 DOM4j 支持对 XML 文件的修改,包括添加、删除或更新节点。例如,修改某个元素的值: ```java Element element = root.element("元素名称"); element.setText("新的文本内容");...

    dom4j解析XML

    DOM4J提供了`Format`类用于格式化XML输出,使其更易读。创建一个`Format`对象并使用`outputString()`方法: ```java Format prettyFormat = Format.getPrettyFormat(); String formattedXML = doc.asXML...

Global site tag (gtag.js) - Google Analytics