我有以下问题:
我有一个XML文件(大约1GB),并且必须上下迭代(即不顺序;一个接一个),以获得所需的数据并对其进行一些操作.最初,我使用了DOM Java包,但很明显,在解析XML文件时,JVM达到了最大堆空间并停止了.
为了克服这个问题,我提出的解决方案之一是找到另一个迭代XML中每个元素的解析器,然后将它的内容存储在硬盘上的临时SQLite数据库中.因此,通过这种方式,不会超出JVM的堆,并且一旦填满所有数据,我就会忽略XML文件并继续对临时SQLite数据库执行操作.
还有另一种方法可以解决我的问题吗?
这个问题与最快的XML解析器有些相关, 适用于Java中的小型简单文档, 但有一些更具体的细节.
我正在开发一个需要解析许多(数百万),小(约300k)xml文档的应用程序.目前的实现是使用xerces-j,并且在1.5 GHz机器上每xml文档大约需要2.5 ms.我想改善这种表现.我偶然发现了这篇文章
http://www.xml.com/pub/a/2007/05/16/xml-parser-benchmarks-part-2.html
声称libxml2可以解析比任何java解析器快一个数量级.我不确定我是否相信它,但它引起了我的注意. 有没有人尝试过使用jvm中的libxml2?如果是这样,它比java dom解析(xerces)更快吗? 我想我仍然需要我的java dom结构,但我猜测从c-struct dom复制到java-dom不应该花费很长时间.我必须有java-dom - sax在这种情况下不会帮助我.
更新:我刚刚为libxml2写了一个测试,它没有比xerces快得多...授予我的c编码能力非常生疏.
更新我在这里扩展了一个问题: 为什么sax解析比dom解析更快?stax是如何工作的? 并且我愿意放弃dom.
谢谢
在Qt中,有许多不同的方法可以使用XML.为了保持这个简单,我只想查看QXml*类和QDom*类.
我试图找出使用哪一个,但他们都看起来有类似的功能.
QXml和QDom之间的主要区别是什么?
假设的例子:是否有人将整个xml文件读入内存,使其在启动时变慢但在启动后更快?
您应该使用哪种方法来使用一种方法而不是另一种方法?你为什么要用另一个呢?
假设的例子:假设您正在进行"一次通过"而非"多次通过"......
避免在内存中使用大对象,或使用String来保存应使用更好的工具处理的大型文档.例如,不要将大型XML文档读入String或DOM.
以上引用来自一篇文章.读取大型xml文档的最佳解决方案是什么?