`
cloudtech
  • 浏览: 4641815 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

快速有效的解析大型XML文件

 
阅读更多

和老师做研究也快一年了。使我认识比较深的是对XML的解析和图论。由于我们做的试验是通过XML来生成图,于是摆在我们面前的首要问题是如何解析XML。

在此之前曾经用过DOM4J来解析过XML,那是在给研究生的学姐作业Webservice的时候用的,用来解析wsdl文件,来实现简单的动态的服务调用。那个wsdl最多也就几兆,大部分可以将内容放在内存中。而现在解析的最小的XML文件都有100M,用那种比较简单的解析方式是无法快速解析的。我们知道JAVA解析xml有以下几种方法:jdom、dom4j、dom、sax。还有一种是自己写一个解析器!这个我也写过,能够解析一般的XML文件,可是通用性不是很好就没做太多的研究。我们知道前面两种都是比较好用的,如jdom,dom4j可以使用xpath规则的语言来读取xml中指定的内容。但是它们都是和dom一样,都是将整个xml文件读入内容中在对xml进行解析,这样的解析方式对与大型的xml是不合适的。因为受到内存的限制。

那么怎么解析大型的xml数据呢?我想大家看到现在也应该知道是那个,就是sax。sax解析xml它是以流的形式将xml内容读入内存中,我们使用sax解析xml是可以继承DefaultHandler类,也可以实现相应的接口,对其中的五个方法进行重写,分别是:

1、public void startDocument() //该方法是解析xml的入口,即开始对XML解析 
2、public void startElement(String uri, String localName, String qName,Attributes attributes)//这是对xml一个element进行解析,如:<element attribute='value'>text</element>
其中两个参数是最常用的,一个就是attributes和qName,此处的attributes是一个集合,可以将多个属性封装在其中,
可以通过attributes.getValue(0)来获得此处的attribute的value,而qName是此处的element,也就是元素名 
3、public void characters(char[] ch, int start, int length)//该方法是获得元素间的text文本内容,可以通过new String(ch, start, length);来获得,
4、public void endElement(String uri, String localName, String qName)//此处是一个元素的结束方法,如此处的</element>时则调用该方法 
5、public void endDocument() //该方法是在解析完xml文件后调用该方法


有上面可以看出sax解析xml是更具xml内容的组成结构来进行解析的,每个方法代表的是xml结构中的一个成分,所以可以灵活的运用,来对xml进行解析。通过试验表明sax解析200m的XML文件只需几十秒的时间(是在我的个人电脑上)。

希望这篇文章能给初次借出对大型XML文件进行解析的人带来一定的帮助,从而避免我的弯路。谢谢阅读本文......


分享到:
评论

相关推荐

    Java中四种XML解析技术

    JDOM 的优点是可以快速地解析大型 XML 文件,并且使用起来也要简单得多。 在测试中,我们使用了 JDOM 解析器来实现 JDOM 解析,结果显示,JDOM 解析的速度较快,特别是在大型 XML 文件时。 四、 XPath XPath 是一...

    XML文件解析问题.pdf

    例如,在需要快速解析大型 XML 文件时,DOM 解析方式可能是更好的选择,而在需要低内存占用时,SAX 解析方式可能是更好的选择。 在本文的测试中,我们使用 JSP 调用 Bean 来测试四种主流的 XML 文件解析方案。测试...

    利用Dom4j生成XML和解析XML

    最后,Dom4j 可以处理大型 XML 文档,性能非常好。 结论 Dom4j 是一个功能强大且易于使用的 Java 库,用于生成和解析 XML 文档。在本文中,我们学习了如何使用 Dom4j 生成 XML 文档和解析 XML 文档。使用 Dom4j ...

    数据解析,小型 XML 解析库

    Mini-XML 是一个小型 XML 解析库,您可以使用它来读取应用程序中的 XML 数据文件或字符串,而无需大型非标准库 读取 UTF-8 和 UTF-16 并写入 UTF-8 编码的 XML 文件和字符串。 数据存储在链表树结构中,保留 XML ...

    解析xml中的java包

    本章目标 1. 了解什么是xml? 1.1 什么是xml? 可扩展的标记语言。...一次性读取所有内容到内存(不适于大型xml文件解析)。 (大型xml文件,建议:分解xml文件) 事件模型:Sax 特点:性能高、编码非常复杂。

    xml 面试题总结

    STAX 的优点是可以处理大型文件,性能较好,且可以随机访问 XML 文档。STAX 的缺点是需要编写更多的代码来处理 XML 文件。 二、XML 文档定义形式 XML 文档定义形式是指 XML 文档的结构和约束定义。常见的 XML 文档...

    fralax:大型XML文件解析框架

    大型XML文件解析框架[FraLaX] 用于不同XML解析器的包装程序,使用XPath Searches建立用于XML文件解析的标准API。 标准解析器实现基于 。 他们不希望您知道的XML技术。 用法 见和 JavaDoc的普遍使用以及一个更...

    读写超大类xml文件,使用dom4j读写xml文件的工具类

    基于dom4j的读写xml文件的工具包。封装了dom4j操作xml文档的常和方法。 支持两种读写方法。1:针对小文件的读取整个文档,2:针对大文件的,逐行读取。读到几百M文件毫无压力。

    java解析xml及4种常用解析比较

    然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。 SAX解析器采用了基于事件的...

    大型Xml解析的parseUtil源码

    设计思路:通过封装一个切割文件的工具类将一个大xml文件分批次读取内容然后截取所要的内容。如:每次读取部分文件内容,比如10M。Xml标签定位、标签匹配。

    stax 解析xml demo project

    stax 以流事件的方式读取xml,可以应用与大型的xml文档的操作,使用最新的stax xml解析技术读写xml的eclipse 工程

    xmlr:用于解析非常大的XML文件的Python包

    xmlr:用于解析非常大的XML文件的Python包

    Python3基于sax解析xml操作示例

    利用SAX解析XML文档牵涉到两个部分:解析器和事件处理器。 解析器负责读取XML文档,并向事件处理器发送事件,如元素开始跟元素结束事件; 而事件处理器则负责对事件作出相应,对传递的XML数据进行处理。 1、对大型文件...

    php-fast-xml-parser:用于PHP的快速SAX XML解析器

    PHP快速XML解析器PHP Fast XML Parser是一个PHP库,用于使用PHP解析大型XML文件。 主要特点: 轻巧; 灵活(可以通过回调处理程序轻松管理结果); 适用于内存关键型项目(解析500mb XML文件时平均约为10Mb)示例与...

    基于Java的XML解析与反射设计模式.doc

    所以在读取大型xml时可以把 xstream与saxparser结合起来使用,用saxparser读取整个xml把核心数据部分让xstrea m来解析成javabean,这样既解决了大数据的问题又利用了xstream快速转化javabean的 优点。 为了利于多...

    a2lparser:Python A2L解析器和XML导出器

    要解析A2L文件并生成相应的XML文件,请使用以下命令: python a2lparser.py [file.a2l] --xml 您也可以将多个文件放在一起。 例如,如果您有一个目录a2l_files其中包含以*.a2l结尾的A2L文件, *.

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    DTD是"有效XML文档"的必须文件,我们通过DTD文件来定义文档中元素和标识的规则及相互关系。如何建立一个DTD文件呢?让我们一起来学习: 1.设置元素 元素是XML文档的基本组成部分。你要在DTD中定义一个元素,然后...

    Xml2Json Converter-1.2.0 转换器jar

    Xml2Json转换器,使用GUI的简单转换工具(用JavaFX编写) , 用于将大型 XML文件转换为json和json to XML, 有指示进度并使用少量内存进行转换。从1.2.0 版应用程序开始, 支持从目录批量转换文件的模式。 JSON和XML的...

    萨克斯管:纯JavaScript中快速轻量的事件驱动流XML解析器

    这意味着Saxophone的内存占用量低,可以轻松解析大型文档,并且可以解析来自流的文档。 解析器在解析时不会跟踪文档的状态,尤其是不会检查文档的格式或有效程度,从而使其变得超快(请参阅下面的)。 当您需要从...

    poi:适合解析小的excel文件,文件稍微大一点就出现OOM。

    事件驱动解析是把文件转换成xml,然后一边读取一边解析,这样就对内存的占用就会很少,可以很好的处理poi出现OOM的问题。 maven添加需要的jar包 &lt;groupId&gt;org.apache.poi &lt;artifactId&gt;poi &lt;version&gt;3.15 ...

Global site tag (gtag.js) - Google Analytics