xml - 根据内部内容提取 XML 元素
问题描述
我有一个巨大的 XML 文档(超过 12 GB),需要按以下方式解析...
给定这样的结构:
<person name=Alice>
<colour>blue</colour>
</person>
<person name=Bob>
<colour>green</colour>
</person>
<person name=Charles>
<colour>blue</colour>
</person>
我想在一个单独的文件中只提取那些person
包含子字段的元素<colour> blue </colour>
。
例如,给定前面的 XML 代码,程序的输出应该是一个单独的文件,内容如下:
<person name=Alice>
<colour>blue</colour>
</person>
<person name=Charles>
<colour>blue</colour>
</person>
我尝试使用grep
and sed
,因为它们是非常有用的工具,并且可以管理像我这样的大文件,但我不太确定应该使用的正则表达式。
提前致谢!
编辑:正如我所指出的,我需要一个基于流的工具,否则程序就会崩溃!我试过xmlstarlet
了,但程序是自动终止的(我想是由于内存使用)。
EDIT2:我也尝试使用 拆分文件xml_split
,但生成的子文件数量根本无法处理。那么,有什么建议吗?
解决方案
由于到目前为止您尝试过的任何 XML 感知工具都不适合您,并且如果您的输入像您发布的那样简单和常规:
$ awk -v RS= -v ORS='\n\n' '/<colour>blue</' file
<person name=Alice>
<colour>blue</colour>
</person>
<person name=Charles>
<colour>blue</colour>
</person>
如果这不是您所需要的,那么编辑您的问题以提供更具代表性的示例输入/输出。
推荐阅读
- css - 你如何让 CSS Isolation 在引用的项目上工作?
- ios - 无法将变量的值从一个类传递给Objective c中的另一个类
- python - QGraphicsscene.itemAt() 方法抛出错误
- django - 带有mongodb的Django rest-framework不创建自动字段主键ID
- laravel - 如何在 Laravel 项目中禁用 Eslint?
- c - 在另一个函数中使用修改后的结构
- python - OpenCV 拍摄黑色图片
- c# - 如何将字符串数组反序列化为类 []?
- python - 直方图与高斯函数的拟合似乎是错误的
- python-3.x - 有没有办法从句子中替换一个字符