本文使用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提供了流式(SAX)和事件驱动(ElementHandler)的解析方式,使得大文件读取变得更为高效。 首先,`Dom4jReader.java`文件可能包含了使用DOM4J的分步读取大文件的核心代码。它利用了SAX解析...
在Java中,解析XML文件是常见的任务,通常有DOM(Document Object Model)和DOM4J两种方式。下面我们将详细探讨这两种解析方法。 DOM解析方式是将整个XML文件加载到内存中,形成一棵DOM树,每个节点代表XML文档的一...
本教程将详细讲解如何利用DOM4J进行XML文件的创建和读取。首先,我们需要了解DOM4J的核心概念,如Element、Attribute、Document等。 1. **DOM4J基本概念**: - **Document**: XML文档的根节点,代表整个XML文件。 ...
接下来,我们将创建一个`SAXReader`实例,它是DOM4J中的解析器,用于读取XML文件: ```java SAXReader reader = new SAXReader(); ``` 然后,使用`reader`读取XML文件并获取`Document`对象,`Document`代表整个XML...
在本文中,我们将详细探讨如何利用DOM4J库来读取XML文件。 1. **安装DOM4J** 要使用DOM4J,首先需要将其添加到你的项目依赖中。如果你使用的是Maven,可以在`pom.xml`文件中添加以下依赖: ```xml <groupId>...
1. **解析XML**:DOM4J可以读取XML文件,将其转换为一个树形结构,即Document对象。解析器有SAX和DOM两种模式,SAX是事件驱动的,适用于大文件,而DOM则将整个文档加载到内存中,适合小文件。 2. **创建XML**:DOM4...
标题中的“通过Dom4j创建和读取xml文件”指的是使用Java库Dom4j来处理XML文档的操作。Dom4j是一个灵活且功能丰富的Java XML API,它提供了多种方式来解析、创建、修改XML文档。本知识点主要涵盖以下几个方面: 1. *...
### 使用Dom4j读取XML文件的方法详解 #### 一、引言 在Java开发过程中,经常需要处理各种格式的数据文件,其中XML(可扩展标记语言)作为一种标准的数据交换格式被广泛使用。为了高效地解析和操作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从XML文件中读取数据源配置。 首先,我们需要理解DOM4J的基本概念。DOM4J是基于DOM模型的,DOM(Document Object ...
同时,DOM4J还提供了`Writer`接口,可以将XML文档写入文件或流,实现XML数据的持久化。 总结来说,DOM4J 2.1.3是一个强大且易用的XML处理工具,它的API文档和源代码为开发者提供了便利的学习和开发环境。无论你是...
在实际开发中,DOM4J常用于XML配置文件的读取、XML数据的交换、XML文件的生成等场景。例如,在Web服务开发中,它可以用来解析WSDL文件;在Spring框架中,用于读取和处理配置文件;在数据持久化领域,如Hibernate,它...
在这个场景中,我们关注的是如何使用DOM4J以String的形式读取XML内容,然后将String的值赋给XML中的特定节点,最后将更新后的内容写回XML文件。下面我们将详细探讨这一过程。 1. **解析XML到String** 要将XML文件...
而DOM4J提供了一种基于事件流的解析方式,即SAX解析器,可以有效地解决这个问题。 **DOM4J解析XML的优势:** 1. **灵活性**:DOM4J提供了丰富的接口和方法,支持XPath查询,可以方便地进行XML结构的操作。 2. **...
在实际开发中,DOM4J常用于读取配置文件、解析XML格式的数据交换,或者与Web服务交互。由于其优秀的性能和丰富的功能,DOM4J 1.6.1版本至今仍被许多开发者所采用,特别是在那些需要高效处理XML的项目中。 总之,DOM...
下面是一个使用DOM4J读取带有命名空间的XML文件的基本步骤: 1. **导入必要的DOM4J库**: 在项目中引入DOM4J库,通常通过Maven或Gradle等构建工具添加依赖。 2. **解析XML文件**: 使用`DocumentFactory`创建一...
这篇博客“dom4j读取Excel内容”可能探讨了如何使用DOM4J库来解析Excel文件的内容。 首先,我们需要理解DOM4J的工作原理。DOM4J采用的是Document Object Model(DOM)模型,它将XML文档解析为一个树形结构,每个...
**正文** Dom4j是一个非常流行的Java库,用于处理XML文档。它提供了灵活且功能强大的API,使得XML的解析...在实际项目中,Dom4j常用于读取和解析配置文件,因为它的API简洁且易于理解,大大简化了XML数据的处理工作。
在Java中,读取XML文件有多种方法,本文将介绍四种常见的方法:DOM、DOM4J、JDOM和SAX。 DOM(Document Object Model) DOM是W3C组织制定的XML文档对象模型,它提供了对XML文档的树形结构表示。使用DOM方法读取XML...