`
java2k
  • 浏览: 4278 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

利用Dom4J的SAXReader解析大文件

    博客分类:
  • XML
阅读更多
今天用到了对内容量很大的XML文件的解析,顺便记录一下。



      关于XML的解析技术网上有很多文章,不再详述。 主要的方式有JDK自带的JAXP(Java API For XML Parser)、JDom、Dom4j等。其中Dom4J是相当灵活的,很多开源框架都基于Dom4J来做XML解析。

      底层的解析器主要有两种: DOM、SAX。 其中DOM作为树型结构将文本装载到内存中,适合文本内容比较小的;SAX则按照流的方式扫描,事件触发的方式供你处理,比如遇到某个结点的开始符,结束符,大文本不能一次性装载到内存中,就应该采用SAX方式。



      DOM4J利用SAXReader类来读取文件,然后为SAXReader对象设置元素处理解析器ElementHandler,有doStart和doEnd两个方法,分别在遇到元素的开始符号和结束符号时候触发。只需在相应的方法内实现自己的业务逻辑即可。



例子:  XML文件结构如下:

view plaincopy to clipboardprint?<?xml version="1.0" encoding="GB2312"?> 
<TESTINFO version="1.0"> 
    <UPDATEINFO> 
        <PARAM_TIMESTAMP>2010-12-22 09:54:09</PARAM_TIMESTAMP> 
        <CITYINFO_LIST> 
            <CITYINFO City="591" Name="XYZ" No="334" /> 
            <CITYINFO City="591" Name="BJD" No="335" /> 
            <CITYINFO City="591" Name="UUS" No="390" /> 
        </CITYINFO_LIST> 
    </UPDATEINFO> 
</TESTINFO> 
<?xml version="1.0" encoding="GB2312"?>
<TESTINFO version="1.0">
<UPDATEINFO>
<PARAM_TIMESTAMP>2010-12-22 09:54:09</PARAM_TIMESTAMP>
<CITYINFO_LIST>
<CITYINFO City="591" Name="XYZ" No="334" />
<CITYINFO City="591" Name="BJD" No="335" />
<CITYINFO City="591" Name="UUS" No="390" />
</CITYINFO_LIST>
</UPDATEINFO>
</TESTINFO>




其中CITYINFO可能是个很大的列表。 完整的程序代码如下:



view plaincopy to clipboardprint?package com.atu.xmltest; 
 
import java.io.InputStream; 
 
import org.dom4j.DocumentException; 
import org.dom4j.Element; 
import org.dom4j.ElementHandler; 
import org.dom4j.ElementPath; 
import org.dom4j.io.SAXReader; 
 
public class MySaxHandler implements ElementHandler { 
     
    SAXReader reader; 
    public MySaxHandler() { 
        // test.xml文件跟类放在同一目录下  
        try { 
            InputStream is = MySaxHandler.class.getResourceAsStream("test.xml");  
            reader = new SAXReader(); 
            reader.setDefaultHandler(this); 
            reader.read(is); 
        } catch (DocumentException e) { 
            e.printStackTrace(); 
        } 
    } 
    @Override 
    public void onEnd(ElementPath ep) { 
        Element e = ep.getCurrent(); //获得当前节点  
        if(e.getName().equals("PARAM_TIMESTAMP")) 
            System.out.println("解析到时间:"+e.getText()); 
        else if(e.getName().equals("CITYINFO")){ 
            System.out.printf("解析到CITYINFO,属性值为:%s,%s,%s/n", e 
                    .attributeValue("City"), e.attributeValue("Name"), e 
                    .attributeValue("No")); 
        } 
        e.detach(); //记得从内存中移去  
    } 
 
    @Override 
    public void onStart(ElementPath ep) { 
    } 
     
    public static void main(String[] args){ 
        new MySaxHandler(); 
    } 
 

package com.atu.xmltest;

import java.io.InputStream;

import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.ElementHandler;
import org.dom4j.ElementPath;
import org.dom4j.io.SAXReader;

public class MySaxHandler implements ElementHandler {

SAXReader reader;
public MySaxHandler() {
// test.xml文件跟类放在同一目录下
try {
InputStream is = MySaxHandler.class.getResourceAsStream("test.xml");
reader = new SAXReader();
reader.setDefaultHandler(this);
reader.read(is);
} catch (DocumentException e) {
e.printStackTrace();
}
}
@Override
public void onEnd(ElementPath ep) {
Element e = ep.getCurrent(); //获得当前节点
if(e.getName().equals("PARAM_TIMESTAMP"))
System.out.println("解析到时间:"+e.getText());
else if(e.getName().equals("CITYINFO")){
System.out.printf("解析到CITYINFO,属性值为:%s,%s,%s/n", e
.attributeValue("City"), e.attributeValue("Name"), e
.attributeValue("No"));
}
e.detach(); //记得从内存中移去
}

@Override
public void onStart(ElementPath ep) {
}

public static void main(String[] args){
new MySaxHandler();
}

}





运行结果:



解析到时间:2010-12-22 09:54:09
解析到CITYINFO,属性值为:591,XYZ,334
解析到CITYINFO,属性值为:592,BJD,335
解析到CITYINFO,属性值为:593,UUS,390

分享到:
评论

相关推荐

    利用DOM4J解析SOAP的简单示例

    本篇文章将深入探讨如何利用DOM4J解析SOAP消息中的元素,以便在实际项目中进行有效的数据提取和操作。 首先,理解SOAP消息的结构至关重要。一个典型的SOAP消息如下所示: ```xml &lt;!-- Header元素中的内容 --&gt; ...

    dom4j解析xml文件(增删改查)

    在“dom4j解析xml文件(增删改查)”这个主题中,我们将深入探讨如何使用DOM4J来实现XML文档的四种基本操作:增加元素、删除元素、更新元素内容以及查询元素。 首先,让我们了解DOM4J的基本用法。在解析XML文件时,...

    dom4j解析xml文件代码示例

    在`CacheInit.java`这个示例中,可能包含了利用DOM4J解析`emailTemplateConfig.xml`文件,提取或修改其中的配置信息,以初始化缓存或其他系统设置的逻辑。通过上述步骤,你可以理解并实现类似的功能。

    使用Maven管理项目,实现DOM4j操作XML文件

    在这个示例中,我们将深入探讨如何利用Maven管理和DOM4j来操作XML文件。 首先,让我们了解一下Maven。Maven是Apache软件基金会的一个项目,它通过定义项目对象模型(Project Object Model,POM)来管理项目的构建、...

    dom4j基于事件流解析大XML的文件 示例

    2. **性能**:DOM4J不仅支持DOM解析,还支持SAX和STAX解析,后者在处理大型XML文件时能有效减少内存占用。 3. **内存效率**:SAX解析器采用事件驱动模型,只在需要时处理XML元素,避免了内存不足的问题。 4. **易用...

    Dom4j(SaxReader )开发详解

    下面我们将详细探讨如何使用SaxReader解析XML文件: 1. 引入Dom4j库:在Java项目中,可以通过Maven或Gradle等构建工具引入Dom4j依赖。例如,在Maven的pom.xml文件中添加: ```xml &lt;groupId&gt;dom4j &lt;artifactId&gt;...

    dom4j解析xml.txt

    ### DOM4J解析XML知识点详解 #### 一、DOM4J简介 DOM4J(Document Object Model for XML)是一款用于处理XML文档的轻量级Java库。它提供了一种非常简单且灵活的方式来创建、读取、修改和删除XML文档。DOM4J的主要...

    DOM4J解析XML数据

    1. **解析XML文件**:使用DOM4J的`DocumentFactory`创建解析器,如`SAXReader`,然后读取XML文件,生成一个`Document`对象。 2. **访问XML结构**:通过`Document`对象,可以获取根元素(`Element`),进一步遍历...

    dom4j读取大文件的缓存方式

    总结来说,这些文件共同展示了如何利用DOM4J库处理大文件,尤其是通过SAX解析和事件处理来避免内存溢出问题。在实际开发中,对于大文件的XML处理,使用这样的策略能够提高程序的稳定性和效率,同时减少对系统资源的...

    dom4j解析xml,连接oracle数据库

    在本实例中,我们将深入探讨如何使用DOM4J解析XML,并利用这些数据连接Oracle数据库进行数据操作。 首先,让我们了解DOM4J的基本用法。DOM4J的主要类包括`Document`、`Element`、`Attribute`和`Namespace`。`...

    Dom4j封装和解析

    本篇将深入探讨Dom4j的封装和解析技术,以及如何利用它来处理XML文件。 **1. Dom4j基本概念** Dom4j是一个基于Java的XML处理库,它的核心是DOM(Document Object Model)模型,但比Java内置的DOM API更加轻量级和...

    webService 短信接口 dom4j解析

    在本实例中,我们将探讨如何利用DOM4J库解析XML响应,以便有效地处理WebService短信接口返回的数据。 DOM4J是一个强大的Java XML API,它提供了丰富的功能来读取、写入、修改以及查询XML文档。在处理WebService短信...

    java_Dom4j解析XML详解

    Java DOM4J解析XML详解 XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件和文档存储等领域。DOM4J是Java中一个强大的、轻量级的处理XML的库,它提供了丰富的API来读取、...

    dom4j-1.6.1

    - 解析XML文件:使用`DocumentReader`或`SAXReader`读取XML文件并构建DOM4J树形结构。 - 遍历XML:利用`Node`接口的方法如`childNodes()`,`elements()`遍历XML结构。 - XPath查询:通过`XPathExpression`执行...

    dom4j解析XML文件

    在本文中,我们将深入探讨DOM4J如何解析XML文件,并讨论如何利用它来创建XML文档。 ### 1. XML解析 XML(eXtensible Markup Language)是一种标记语言,常用于数据交换和存储结构化数据。DOM4J提供了两种主要的...

    DOM4J jar包

    另外,DOM4J支持SAXReader和SAXWriter,利用SAX解析器的流式处理,减少内存占用。 总之,DOM4J是Java开发中处理XML的利器,提供了全面的功能和优秀的性能。通过将其jar包导入Eclipse项目,开发者可以轻松地进行XML...

    dom4j所需要的包和依赖包

    - **SAXReader**:用于解析XML文档,将XML数据转换为DOM4J的Document对象。 - **XMLWriter**:将DOM4J的Document对象写回XML文件,提供格式化的输出。 - **XPath**:基于XPath表达式进行查询,可以快速定位XML...

    dom4j面向对象解析xml

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

Global site tag (gtag.js) - Google Analytics