最近在解析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的包 是里用dom4j的sax解析方式 sax解析打文件比dom速度快,该项目为测试项目
dom4j下sax解析xml文件 sax解析大文件比dom更快 更节省内存,xml测试文件在src下,可直接运行应用jar包在lib下,无需导入
dom,dom4j,sax解析xml 文件经典实例,内置详细注解
一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml文件的实例
用用4中方式(dom4j、jdom、dom、sax)解析xml
Java使用sax、dom、dom4j解析xml文档的代码,包含dom4j的jar包。
java学习笔记——使用DOM解析XML和使用SAX解析XML
本程序实现了实现dom+dom4J创建XML到解析XML,并实行了SAX 解析XML,大家值得学习!
4种最主流、最全面、最详细的生成和解析xml的4种方式,包括Dom,Dom4j,Sax,JDom,读懂了绝对好用xml,非常好的入门项目,而且精心排版,逻辑清晰
用DOM SAX JDom dom4j 对xml文档解析实例 在学习孙鑫老师视频教程,自己照着敲的源码,希望对大家有帮助
DOM和SAX解析XML文档
分析如何结合使用dom技术和sax技术解析xml文件,实现既可以读取大文档xml又可以实现简单操作xml文件
使用环境eclipse4.8,jdk1.8 使用sax,pull,dom4j解析XML,对xml的简单解析,sax,pull,dom4j的简单使用
xml 三种解析方式dom,sax,dom4j 内涵jar包,xml我默认放在本地D盘的。 三种方式的代码,我自己看别人代码总结。
解析XML的dom、sax和dom4j的jar包。解析XML的dom、sax和dom4j的jar包。
day02_xml *demo01.App1\App2\App3 使用jaxp开发包中的SAX方式解析xml文档,该方式只能读取文档 *demo4j01.App dom4j CURD XML *domo4j.ex 对dom4j 的封装例子
有四种方法 DOM DOM4j JDOM SAX 和相对路径的写法 ,代码是有注释的,通用型的……应该对大家有帮助
XML的四种解析器(dom,sax,jdom,dom4j)原理及性能比较,超详细XML的四种解析器原理及性能比较,超详细
这个文件夹里边的代码是三种方式对xml进行解析,其中dom,dom4j,对小米进行了增删改查,sax对xml进行了解析
Dom,Sax,Xpath解析XML实例,有源码,实例。简单易用,直接可用