【发布时间】:2013-02-14 10:59:57
【问题描述】:
我有以下问题:
我有一个 XML 文件(大约 1GB),并且必须向上和向下迭代(即不是连续的;一个接一个)以获得所需的数据并对其进行一些操作。最初,我使用 DOM Java 包,但很明显,在解析 XML 文件时,JVM 达到其最大堆空间并停止。
为了克服这个问题,我想出的一个解决方案是找到另一个解析器,它迭代 XML 中的每个元素,然后我将它的内容存储在我硬盘上的一个临时 SQLite 数据库中。因此,通过这种方式,不会超出 JVM 的堆,并且一旦所有数据都填满,我将忽略 XML 文件并继续对临时 SQLite 数据库进行操作。
还有其他方法可以解决我手头的问题吗?
【问题讨论】:
-
使用jaxb解析xml
-
正如其他人所说,您需要使用 SAX 解析器而不是 DOM 解析器,它将完全满足您的需求。阅读:stackoverflow.com/questions/6828703/…
-
如果你不能保存整个 DOM 树,你必须找到一种方法来按顺序进行处理。那可能吗?你能展示一个 XSLT 来满足你的需要吗?
-
要解析大型 xml 文件,请始终使用 SAX Parser。参考以下链接StackOverflow
-
非顺序操作是什么意思?您的 XML 中是否有不同的数据,并且它们之间有交叉引用?无论您使用哪种 XML 解析器,都必须将所有数据存储在内存中。而是尝试向 JVM 提供更多
-Xmx,它应该可以轻松处理 1G。
标签: java xml sqlite xml-parsing