xmlstarlet sel在大文件上

mik*_*iku 7 xml xpath command-line xmlstarlet

命令

$ xmlstarlet sel -t -c "/collection/record" file.xml
Run Code Online (Sandbox Code Playgroud)

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

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

mik*_*iku 9

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

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

$ xmlcutty -path /collection/record file.xml
Run Code Online (Sandbox Code Playgroud)


mar*_*rbu 7

Xmlstarlet将所有(或大多数)操作转换为xslt转换,因此简短的答案是否定的.

您可以尝试使用stx,这是类似于xslt的流转换语言.另一方面,如果你不太关心xml,那么使用saxiterparse在python中编写一些东西可能更容易,更快(创建代码所需的时间).