`
vivo
  • 浏览: 15070 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Dom4j按流的方式读取超大文件

    博客分类:
  • java
XML 
阅读更多
本文使用Dom4J读取超大XML文件,并保持很小的内存占用量。适用于不需要将XML全部内容驻留在内存,处理一部分就扔掉一部分的情况。


public class Dom4jSaxReaderSimpleExample implements ElementHandler {

	public void start(File file) throws DocumentException {
		SAXReader reader = new SAXReader();
		reader.addHandler("/root/item", this);
		reader.setDefaultHandler(new PruningElementHandler());
		reader.read(file);
	}

	@Override
	public void onStart(ElementPath elementPath) {
		elementPath.getCurrent().detach();
	}

	@Override
	public void onEnd(ElementPath elementPath) {
		Element elm = elementPath.getCurrent();

		// TODO process with elm

		elm.detach();
		elm = null;
	}

	public static void main(String[] args) throws DocumentException {
		new Dom4jSaxReaderSimpleExample().start(new File("big.xml"));
	}

}

class PruningElementHandler implements ElementHandler {
	public final void onStart(ElementPath elementPath) {
		elementPath.getCurrent().detach();
	}

	public void onEnd(ElementPath elementPath) {
		Element elem = elementPath.getCurrent();
		elem.detach();
		elem = null;
	}
}



需要注意的是应该在onStart方法里面将Element detach掉,还有就是除了注册需要的ElementHandler之外,还应该注册DefaultHandler,如例子中那样。

这是因为虽然已经用了SAX按流的方式读取XML文件,DOM4J还是会在内存创建XML的DOM结构,这会导致内存溢出,这时只要将Element对象Detach掉,在onEnd处理该Element之后,垃圾回收会将Detach的节点回收,这样就可以小内存占用处理大XML文件。

----
分享到:
评论

相关推荐

    dom4j读取大文件的缓存方式

    为了解决这个问题,DOM4J提供了流式(SAX)和事件驱动(ElementHandler)的解析方式,使得大文件读取变得更为高效。 首先,`Dom4jReader.java`文件可能包含了使用DOM4J的分步读取大文件的核心代码。它利用了SAX解析...

    使用dom4j 和本地dom 解析xml 文件

    在Java中,解析XML文件是常见的任务,通常有DOM(Document Object Model)和DOM4J两种方式。下面我们将详细探讨这两种解析方法。 DOM解析方式是将整个XML文件加载到内存中,形成一棵DOM树,每个节点代表XML文档的一...

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

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

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

    接下来,我们将创建一个`SAXReader`实例,它是DOM4J中的解析器,用于读取XML文件: ```java SAXReader reader = new SAXReader(); ``` 然后,使用`reader`读取XML文件并获取`Document`对象,`Document`代表整个XML...

    利用dom4j--读取xml文件

    在本文中,我们将详细探讨如何利用DOM4J库来读取XML文件。 1. **安装DOM4J** 要使用DOM4J,首先需要将其添加到你的项目依赖中。如果你使用的是Maven,可以在`pom.xml`文件中添加以下依赖: ```xml <groupId>...

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

    1. **解析XML**:DOM4J可以读取XML文件,将其转换为一个树形结构,即Document对象。解析器有SAX和DOM两种模式,SAX是事件驱动的,适用于大文件,而DOM则将整个文档加载到内存中,适合小文件。 2. **创建XML**:DOM4...

    通过Dom4j创建和读取xml文件

    标题中的“通过Dom4j创建和读取xml文件”指的是使用Java库Dom4j来处理XML文档的操作。Dom4j是一个灵活且功能丰富的Java XML API,它提供了多种方式来解析、创建、修改XML文档。本知识点主要涵盖以下几个方面: 1. *...

    详细介绍使用Dom4j读取xml文件的方法

    ### 使用Dom4j读取XML文件的方法详解 #### 一、引言 在Java开发过程中,经常需要处理各种格式的数据文件,其中XML(可扩展标记语言)作为一种标准的数据交换格式被广泛使用。为了高效地解析和操作XML文档,开发者...

    dom4j的jar包(读取xml)

    使用DOM4J读取XML文件的基本步骤如下: 1. 引入DOM4J和Jaxen的库:在项目中添加`dom4j-1.6.1.jar`和`jaxen-1.1-beta-6.jar`的依赖。 2. 加载XML文件:使用`DocumentHelper.parseText()`或`DocumentBuilder.build()`...

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

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

    dom4j-2.1.3.zip

    同时,DOM4J还提供了`Writer`接口,可以将XML文档写入文件或流,实现XML数据的持久化。 总结来说,DOM4J 2.1.3是一个强大且易用的XML处理工具,它的API文档和源代码为开发者提供了便利的学习和开发环境。无论你是...

    dom4j dom4j dom4j dom4j

    在实际开发中,DOM4J常用于XML配置文件的读取、XML数据的交换、XML文件的生成等场景。例如,在Web服务开发中,它可以用来解析WSDL文件;在Spring框架中,用于读取和处理配置文件;在数据持久化领域,如Hibernate,它...

    dom4j以String的方式读取XML的内容,并给String的值赋值,写入XML中

    在这个场景中,我们关注的是如何使用DOM4J以String的形式读取XML内容,然后将String的值赋给XML中的特定节点,最后将更新后的内容写回XML文件。下面我们将详细探讨这一过程。 1. **解析XML到String** 要将XML文件...

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

    而DOM4J提供了一种基于事件流的解析方式,即SAX解析器,可以有效地解决这个问题。 **DOM4J解析XML的优势:** 1. **灵活性**:DOM4J提供了丰富的接口和方法,支持XPath查询,可以方便地进行XML结构的操作。 2. **...

    dom4j_dom4j1.6.1安装包_

    在实际开发中,DOM4J常用于读取配置文件、解析XML格式的数据交换,或者与Web服务交互。由于其优秀的性能和丰富的功能,DOM4J 1.6.1版本至今仍被许多开发者所采用,特别是在那些需要高效处理XML的项目中。 总之,DOM...

    dom4j 读取带有命名空间的xml文件

    下面是一个使用DOM4J读取带有命名空间的XML文件的基本步骤: 1. **导入必要的DOM4J库**: 在项目中引入DOM4J库,通常通过Maven或Gradle等构建工具添加依赖。 2. **解析XML文件**: 使用`DocumentFactory`创建一...

    dom4j读取Excel内容

    这篇博客“dom4j读取Excel内容”可能探讨了如何使用DOM4J库来解析Excel文件的内容。 首先,我们需要理解DOM4J的工作原理。DOM4J采用的是Document Object Model(DOM)模型,它将XML文档解析为一个树形结构,每个...

    Dom4j解析配置文件与xml小例子

    **正文** Dom4j是一个非常流行的Java库,用于处理XML文档。它提供了灵活且功能强大的API,使得XML的解析...在实际项目中,Dom4j常用于读取和解析配置文件,因为它的API简洁且易于理解,大大简化了XML数据的处理工作。

    读取XML文件的四种方法

    在Java中,读取XML文件有多种方法,本文将介绍四种常见的方法:DOM、DOM4J、JDOM和SAX。 DOM(Document Object Model) DOM是W3C组织制定的XML文档对象模型,它提供了对XML文档的树形结构表示。使用DOM方法读取XML...

Global site tag (gtag.js) - Google Analytics