大容量ファイルからXMLタグを削除する

大容量ファイルからXMLタグを削除する

大容量のXMLファイル(大規模ノードの場合は約100 GB)を解析するのに問題があります。不要なラベルを削除してノードのサイズを縮小しようとしています。たとえば、ランダムな<text>タグです。

次のデフォルトのXMLパーサーを使用すると、xmlstarlet

xmlstarlet ed -P -d '//text' file.xml

私はメモリ不足のため、同じ問題に直面しています。

<text></text>XML構造を破壊せずにすべてのペアを削除する安全な(低メモリスペース)方法はありますか?

ベストアンサー1

私はあなたがそれを試すことをお勧めしますxml_grep、速度は遅いですが、メモリ効率が非常に高いです。perl-XML-Twig(またはxml-twig-tools) - ツリーモードで大容量のXml文書を処理するためのPerlモジュールの一部です。名前で除外ノードを使用できます-v。を参照して、man xml_grep小さな入力でコマンドをテストします。

例:

xml_grep --nowrap -v 'text' input.xml > output.xml

または時間がかかりますので、進行状況バーを使って視聴してください。

pv input.xml | xml_grep --nowrap -v 'text' > output.xml

一般的なケースでは、いくつかのsax / streamモジュールと一緒にPython、Perl、Java、Ruby(nokogiri)などの言語を使用できます。

おすすめ記事