大容量の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)などの言語を使用できます。