命令
$ xmlstarlet sel -t -c "/collection/record" file.xml
似乎在应用给定的 Xpath 表达式之前将整个文件加载到内存中。这不适用于大型 XML 文件。
xmlstarlet
是否提供流式处理模式来从大型 (100G+( XML 文件中提取子元素?
由于我只需要一小部分XPath来处理大型XML文件,所以我实际上自己实现了一个小工具:xmlcutty。
我问题中的示例可以这样写:
$ xmlcutty -path /collection/record file.xml
Xmlstarlet 将所有(或大多数(操作转换为 XSLT 转换,因此简短的回答是否定的。
您可以尝试使用 stx,这是一种类似于 xslt 的流式转换语言。另一方面,如果您不太关心 xml,那么使用 sax 或 iterparse 在 python 中一起编码可能会更容易、更快(创建代码所需的时间(。