`

DOM4j以SAX方式解析XML文件

 
阅读更多

最近在解析XML时总会遇到比较大的文件,如果使用DOM的方式解析一次装进内存有可能导致OOM Error。因此,尝试采用SAX的流式方式解析了一下,效果还不错。

使用了开源工具DOM4j,其中提供了SAX解析器。

程序实现:

FileReader rd = new FileReader(new File(filePath));
SAXReader reader=new SAXReader();
reader.setEncoding("UTF-8");
XMLHandler handler = new XMLHandler();
reader.addHandler("/data/apps/app/appid", handler);
reader.addHandler("/data/apps/app/category", handler);
reader.read(rd);

首先,创建SAXReader并设定读取文件编码为UTF-8。然后指定并添加解析处理器,因为是流式解析,所以每次解析到对应的标签时就会调用相应的回调方法。XMLHandler实现如下(部分代码):

public class XMLHandler implements ElementHandler {
        public void onStart(ElementPath elementPath) {}

	public void onEnd(ElementPath elementPath) {
		try{
			Element row = elementPath.getCurrent();
			String path = elementPath.getPath();
			if("/data/apps/app/appid".equalsIgnoreCase(path)){
				parseElement(row);
			}else if("/data/apps/app/category".equalsIgnoreCase(path)){
				parseElement(row);
			}
		}catch(Exception e){
			logger.error("onEnd:",e);
		}
	}
        
	private String parseElement(Element root)throws Exception{
		return root.getText();
	}
}

其中onStart为遇到开始的标签时回调,onEnd为遇到结束的标签时回调。path为标签对应的xml结构,上面的程序意思就是遇到某个appid或者category的结束标签时,将该标签的Text内容解析出来(之后可以用其它数据结构存储起来)。

xml文件格式:

<data>
  <apps>
    <app>
      <appid>1</appid>
      <category>游戏</category>
    </app>
  </apps>
</data>

所以appid对应的路径为:/data/apps/app/appid,category对应的路径为:/data/apps/app/category。

希望对看到的人有所帮助。

 

附上参考资料,讲的都很详细:

http://xiaoyuclub.iteye.com/blog/865120  dom4j基于sax事件处理
http://ruanchengui1.iteye.com/blog/1140260 dom4j处理xml文件-saxreader与elementhandler的配合

 

分享到:
评论

相关推荐

    dom4j下sax解析xml

    在提供的“analysis_xml”项目中,很可能包含了一个示例,演示了如何使用dom4j的SAX解析器解析XML文件。这样的测试项目有助于理解SAX解析的工作原理,并在实际开发中应用。 总结起来,dom4j库提供了DOM和SAX两种XML...

    dom4j下的sax解析xml

    总之,DOM4J结合SAX解析XML为处理大文件提供了一种高效且内存友好的方式。通过创建SAXReader,设置事件监听器,然后解析XML文件,你可以实现对XML文档的流式处理,从而在处理大量数据时避免内存瓶颈。

    dom,dom4j,sax 解析xml文件实例

    使用DOM4J解析XML,首先需要导入DOM4J库,然后使用`DocumentHelper`类的`parseText()`或`parse()`方法。比如: ```java Document doc = DocumentHelper.parseText(new File("testxml.xml").getText()); Element root...

    SAX解析XML文件实例

    一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml文件的实例

    Java使用sax、dom、dom4j解析xml文档

    Java提供了多种解析XML的API,包括SAX(Simple API for XML)、DOM(Document Object Model)以及DOM4J。下面我们将详细探讨这些解析方式及其在实际开发中的应用。 1. SAX解析器: SAX是一种基于事件驱动的解析器,...

    XML的四种解析器(dom,sax,jdom,dom4j)原理及性能比较,超详细

    常见的 XML 解析器有 DOM、SAX、JDOM 和 DOM4J 等。每种解析器都有其特点和优缺,选择合适的解析器对应用程序的性能和开发效率有很大影响。 1. DOM 解析器 DOM(Document Object Model)是 W3C 官方标准,用于表示...

    dom+dom4J+SAX 解析

    本程序的核心是利用DOM、DOM4J和SAX三种不同的方式解析XML文档,每种方法都有其独特的优势和适用场景。 1. DOM解析: DOM(Document Object Model)是一种将XML文档转换为内存中树形结构的模型。它将XML文件加载到...

    生成、解析xml的四种方式(dom,dom4j,sax,jdom)

    本文将详细介绍生成和解析XML的四种主要方法:DOM、DOM4J、SAX和JDOM。 1. DOM(Document Object Model) DOM是W3C组织推荐的一种解析XML的标准方式。它将XML文档视为一个树形结构,每个节点代表XML文档的一部分。...

    Dom4J与SAX解析实例

    2. **Dom4J解析XML**:首先,通过`DocumentBuilderFactory`创建`DocumentBuilder`,然后用`parse()`方法解析XML文件。解析后,可以使用Dom4J的API遍历和修改DOM树。 3. **Dom4J操作XML**:例如,可以使用`Element`类...

    dom4j解析xml详解

    ### DOM4J解析XML详解 #### 一、DOM4J简介与特性 DOM4J是一个由dom4j.org开发的开源XML解析包,专为Java平台设计,它不仅支持DOM、SAX和JAXP标准,还巧妙地融入了Java集合框架,使其成为Java开发者在处理XML数据时...

    用DOM SAX JDom dom4j 对xml文档解析实例

    dom4j支持DOM和SAX解析,同时提供了强大的查询功能,如XPath和XML Schema验证。它的API设计简洁,易于使用,适合各种XML处理需求。 在实际应用中,选择解析器主要取决于需求。如果处理的XML文件较小,内存资源充足...

    使用dom4j和jaxen解析xml

    - **dom4j+jaxen操作XML**:首先使用dom4j解析XML,然后通过jaxen创建XPath对象并执行查询。查询结果可以是元素、属性或其他XML节点,根据需要进行进一步处理。 例如,以下代码展示了如何使用dom4j和jaxen解析XML...

    Sax解析XML文件解析

    总结,SAX解析XML是一种高效且节省内存的处理方式,适用于处理大量XML数据。通过实现回调接口,我们可以根据XML文档的结构执行相应的操作,而无需一次性加载整个文件。了解并熟练掌握SAX解析技术,有助于我们在处理...

    dom4j解析xml文件的压缩包

    5. **事件驱动解析(SAX)**:除了传统的DOM解析外,DOM4J还支持SAX解析器,这种解析方式适用于处理大型XML文件,因为它不需要一次性加载整个文档到内存。 6. **Namespace支持**:DOM4J提供了对XML命名空间的全面...

    dom,dom4j,sax对xml进行解析

    在给定的文件"cn.jiexi.com"中,我们可以假设包含有使用DOM、DOM4J和SAX解析XML的示例代码。这些代码可能展示了如何在Java环境下,针对XML文件(比如小米的产品数据)进行增删改查操作。通过DOM和DOM4J,可以直接...

    Java解析XML文件的DOM和SAX方式.doc

    Java 解析 XML 文件的 DOM 和 SAX 方式是指在 Java 中使用 Document Object Model(DOM)和 Simple API for XML(SAX)两种方式来解析 XML 文件的技术。下面将详细介绍这两种方式的原理、实现和优缺点。 DOM 方式 ...

    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...

    xml 三种解析方式dom,sax,dom4j

    SAX解析器采用事件驱动的方式,它逐行读取XML文档,遇到元素开始、结束、属性等事件时触发相应的回调函数。这种方式节省了内存,因为它不需要在内存中保存整个XML文档,但需要编写回调函数来处理事件,增加了编程...

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

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

Global site tag (gtag.js) - Google Analytics