如何在巨大的XML文件中执行命令行XPath查询?

时间:2015-05-18 14:21:06

标签: xml xpath xmllint

我有一组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文件。一段时间后我才收到“被杀”的消息。我尝试启用流API,但这只会导致无输出。

xmllint --loaddtd --stream --xpath '/root/a/b/c/text()' /path/to/huge.xml

使用xmllint进行XPath查询时,有没有办法启用流模式?是否有其他/更好的方法可以对巨大的XML文件执行命令行XPath查询?

2 个答案:

答案 0 :(得分:3)

如果您的XPath表达式非常简单,请尝试xmlcutty

从主页:

  

xmlcutty是一个简单的工具,可以快速地从大型XML文件中分割出元素。由于它以流式方式工作,因此几乎不使用任何内存,每分钟可处理大约1G的XML。

答案 1 :(得分:-1)

更改ulimits可能会有效。试试这个:

$ ulimit -Sv 500000
$ xmllint (...your command)