【发布时间】:2015-05-18 14:21:05
【问题描述】:
我有一组 XML 文件,其中一些非常大(多达 5000 万个元素节点)。我正在使用 xmllint 来验证这些文件,这要归功于流 API,即使对于大型文件也能很好地工作。
xmllint --loaddtd --stream --valid /path/to/huge.xml
我最近了解到xmllint 也可以进行命令行 XPath 查询,非常方便。
xmllint --loaddtd --xpath '/root/a/b/c/text()' /path/to/small.xml
但是,这些 XPath 查询不适用于大型 XML 文件。一段时间后,我刚刚收到一条“Killed”消息。我尝试启用流 API,但这只会导致根本没有输出。
xmllint --loaddtd --stream --xpath '/root/a/b/c/text()' /path/to/huge.xml
在使用xmllint 进行 XPath 查询时,有没有办法启用流模式?是否有其他/更好的方法可以对大型 XML 文件进行命令行 XPath 查询?
【问题讨论】:
-
尝试
--shell交互式选项(仅使用 xml 文件路径) -
我尝试为一个大文件打开交互式shell,但在我输入任何命令之前它会崩溃(“Killed”,就像不使用
--stream的情况一样)。 -
附加一个示例 XML 文件会有所帮助 - 我不知道 large 在您的情况下可能意味着什么。
-
想想类似 dblp XML 转储 (dblp.dagstuhl.de/xml)。在非流式上下文中解析该文件时,我收到“Killed”错误。但我的问题本质上是针对任何足够大的文件,以至于不建议您在主内存中构建 DOM,而应该使用流式处理方法。