大文件上的 xmlstarlet sel

xmlstarlet sel on large file

命令

$ xmlstarlet sel -t -c "/collection/record" file.xml

似乎在应用给定的 Xpath 表达式之前将整个文件加载到内存中。这不适用于大型 XML 文件。

xmlstarlet是否提供从大型 (100G+) XML 文件中提取子元素的流模式?

Xmlstarlet 将所有(或大部分)操作转换为 xslt 转换,所以简短的回答是否定的。

如果您不太关心 xml,您可以尝试使用 stx, which is streaming transformation language similar to xslt. On the other hand, just coding something together in python using sax or iterparse 可能更容易和更快(创建代码所需的时间)。

因为对于大型 XML 文件我只需要一小部分 XPath,所以我实际上自己实现了一个小工具:xmlcutty.

我的问题的例子可以这样写:

$ xmlcutty -path /collection/record file.xml