【发布时间】:2020-06-29 21:03:01
【问题描述】:
我有一个巨大的 XML 文档(超过 12 GB),我需要通过以下方式对其进行解析...
给定这样的结构:
<person name=Alice>
<colour>blue</colour>
</person>
<person name=Bob>
<colour>green</colour>
</person>
<person name=Charles>
<colour>blue</colour>
</person>
我想在单独的文件中仅提取那些包含子字段 <colour> blue </colour> 的 person 元素。
例如,给定前面的 XML 代码,程序的输出应该是一个单独的文件,内容如下:
<person name=Alice>
<colour>blue</colour>
</person>
<person name=Charles>
<colour>blue</colour>
</person>
我曾尝试使用grep 和sed,因为它们是非常有用的工具,并且还可以像我一样管理大文件,但我不太确定应该使用哪个正则表达式。
提前致谢!
编辑:正如我所指出的,我需要一个基于流的工具,否则程序就会崩溃!我试过xmlstarlet,但程序是自动终止的(我想是因为内存使用)。
EDIT2:我也尝试过使用xml_split分割文件,但是生成的子文件数量根本无法处理。那么,有什么建议吗?
【问题讨论】:
-
看看xidel。
-
Don't Parse XML/HTML With Regex. 我建议使用 XML/HTML 解析器 (xmlstarlet, xmllint ...)。
-
@JackFleeting 是基于流的?问题是,如果没有,程序会被自动终止。