用愚蠢的方式修剪 XML 文件

用愚蠢的方式修剪 XML 文件

(见下面的解决方案)

我有 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

使用可以使用通配符的文本编辑器进行搜索和替换?最好是不会在打开时尝试加载整个文件的编辑器(否则会花很长时间)。大多数十六进制编辑器还具有文本搜索替换功能。

相关内容