相关疑难解决方法(0)

在JAVA中解析大型XML文档

我有以下问题:

我有一个XML文件(大约1GB),并且必须上下迭代(即不顺序;一个接一个),以获得所需的数据并对其进行一些操作.最初,我使用了DOM Java包,但很明显,在解析XML文件时,JVM达到了最大堆空间并停止了.

为了克服这个问题,我提出的解决方案之一是找到另一个迭代XML中每个元素的解析器,然后将它的内容存储在硬盘上的临时SQLite数据库中.因此,通过这种方式,不会超出JVM的堆,并且一旦填满所有数据,我就会忽略XML文件并继续对临时SQLite数据库执行操作.

还有另一种方法可以解决我的问题吗?

java xml sqlite xml-parsing

11
推荐指数
1
解决办法
2万
查看次数

来自java的libxml2

这个问题与最快的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.

谢谢

java xml dom xerces libxml2

7
推荐指数
1
解决办法
3339
查看次数

QXml和QDom有什么区别?

在Qt中,有许多不同的方法可以使用XML.为了保持这个简单,我只想查看QXml*类和QDom*类.

我试图找出使用哪一个,但他们都看起来有类似的功能.

QXml和QDom之间的主要区别是什么?

假设的例子:是否有人将整个xml文件读入内存,使其在启动时变慢但在启动后更快?

您应该使用哪种方法来使用一种方法而不是另一种方法?你为什么要用另一个呢?

假设的例子:假设您正在进行"一次通过"而非"多次通过"......

c++ xml user-interface qt

3
推荐指数
1
解决办法
4148
查看次数

读取大型xml文档的最佳解决方案是什么?

避免在内存中使用大对象,或使用String来保存应使用更好的工具处理的大型文档.例如,不要将大型XML文档读入String或DOM.

以上引用来自一篇文章.读取大型xml文档的最佳解决方案是什么?

java xml

1
推荐指数
1
解决办法
1031
查看次数

标签 统计

xml ×4

java ×3

c++ ×1

dom ×1

libxml2 ×1

qt ×1

sqlite ×1

user-interface ×1

xerces ×1

xml-parsing ×1