(见下面的解决方案)
我有 XML 文件,我用 Python 脚本来解析这些文件(这个脚本不是我写的,但它可以完美地完成工作)。问题是 XML 文件很大(约 1GB),由于内存拥塞,解析过程需要很长时间。XML 文件中的某些元素充满了无用的信息 - 最好的清除方法是什么?我尝试过 xmlstarlet,但它太“以 XML 为导向”,也就是说,由于与 Python 脚本相同的原因,解析过程需要很长时间。
我只需要做的就是以一种愚蠢的方式摆脱给定的元素:删除文件之间的所有内容(有多个<mytag>
对,全部需要删除)。</mytag>
<mytag>...</mytag>
我会非常感激您的想法,因为我确信有好的方法可以做到这一点而不需要重新发明轮子。
谢谢你!
编辑:我最终得到了
perl -pe "undef $/;s/<mytag>.*?<\/mytag>//msg" < inputfile.xml > outputfile.xml
我没有意识到@Vlad 也发布了这篇文章。
答案1
处理非常大的 XML 文件时,推荐的方法是使用 SAX 事件驱动的解析器。lxml
可以在 中做到这一点Python
,这里有一篇关于这个主题的精彩文章:使用 lxml 在 Python 中实现高性能 XML 解析。
另一种选择是使用类似的方法sed
从文件中删除这些标签。
或者Perl
脚本:
perl -i.bak -pe 'BEGIN{undef $/;} s/<mytag>.*<\/mytag>//smg' file.xml
答案2
使用可以使用通配符的文本编辑器进行搜索和替换?最好是不会在打开时尝试加载整个文件的编辑器(否则会花很长时间)。大多数十六进制编辑器还具有文本搜索替换功能。