我有一组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查询?
答案 0 :(得分:3)
如果您的XPath表达式非常简单,请尝试xmlcutty。
从主页:
xmlcutty是一个简单的工具,可以快速地从大型XML文件中分割出元素。由于它以流式方式工作,因此几乎不使用任何内存,每分钟可处理大约1G的XML。
答案 1 :(得分:-1)
更改ulimits
可能会有效。试试这个:
$ ulimit -Sv 500000
$ xmllint (...your command)