【发布时间】:2020-03-21 10:45:38
【问题描述】:
我有一个很大的 XML 文件(2 GB),该文件包含太多需要过滤的无用数据,下面是 XML 文件的粗略结构:
(所有无用数据都替换为“useless_information”,看起来干净整洁)
<hmdb>
<metabolite>
<useless_information></useless_information>
<useless_information></useless_information>
<useless_information></useless_information>
<useless_information></useless_information>
...
<normal_concentrations>
<useless_information></useless_information>
<useless_information></useless_information>
<useless_information></useless_information>
...
<concentration>
<useless_information></useless_information>
<useless_information></useless_information>
<useless_information></useless_information>
<useless_information></useless_information>
...
<concentration_value> 100 </concentration_value>
<subject_age> 21 </subject_age>
<subject_sex> male </subject_sex>
</concentration>
<concentration></concentration>
<concentration></concentration>
<concentration></concentration>
...
</normal_concentrations>
</metabolite>
<metabolite></metabolite>
<metabolite></metabolite>
<metabolite></metabolite>
<metabolite></metabolite>
...
</hmdb>
所以,基本上我想保留以下标签和值:concentration_value,subject_age和subject_sex,其余的都不重要,可以过滤,过滤后的XML应该是这样的:
<hmdb>
<metabolite>
<concentration>
<concentration_value> 100 </concentration_value>
<subject_age> 21 </subject_age>
<subject_sex> male </subject_sex>
</concentration>
<concentration></concentration>
<concentration></concentration>
<concentration></concentration>
...
</metabolite>
<metabolite></metabolite>
<metabolite></metabolite>
<metabolite></metabolite>
<metabolite></metabolite>
...
</hmdb>
我需要这个文件中的数据来继续学习(这个文件太大了,我的笔记本电脑打不开这个文件,所以我在使用之前必须过滤掉无用的数据以减小XML文件的大小) , 但我不知道如何编写 perl 脚本, 非常感谢您的帮助, 非常感谢:)
【问题讨论】:
-
您如何决定保留
<normal_concentrations>节点?根据规定的标准和显示的数据,<concentration>节点是否足够? -
您压缩示例文件的方式很好,但我希望有许多节点名称的_all_kinds 要跳过,您不知道。您知道您希望保留的所有节点的名称吗? (或者真的很简单
<normal_concentrations>就这样?) -
嘿,谢谢你的回复,是的,我需要保留 normal_concentrations 标签,而在这个标签中,还有 3 个标签和值需要保留,“concentration_value、subject_age 和 subject_sex”,其余的都可以去掉,但是每个“代谢物”标签中都有很多“浓度”标签,我需要将所有“浓度”标签保留在不同的“代谢物”标签中。
-
好的。但是,当您说“需要将所有“浓度”标签保留在不同的“代谢物”标签中”时,您是否也不需要保留
metabolite节点? (作为一个结构,即使concentration以外的所有子节点都被删除。)期望的结果没有显示出来。 -
哦,是的!你是对的,真的很感激!我还需要保留代谢物标签,抱歉让您感到困惑,我现在编辑问题:)