特定のフィールドのみをフィルタリングしたい大規模な(数十万のレコードを含む)XMLファイルがあります。ファイル構成の例:
<A>
<id>123</id>
<B>
<C>value1</C>
<D>value2</D>
....
<E></E>
</B>
<Z></Z>
...
<Y></Y>
<A>
このXMLファイルをフィルタリングし、CフィールドとDフィールドに含まれるIDとデータのみを含めたいです。
どうすればいいですか?
ベストアンサー1
これxmlstarletこのツールは次のことを行います。
xmlstarlet sel -t -m /A -o ID, -v id -n -o C, -v //C -n -o D, -v //D -n test.xml
ルート要素()-m /A
の下の各Aについて、文字列「ID」(-o ID,
)、idの内容()-v id
、改行()を印刷し、子要素C()、D()、-n
およびその項目についても同様です。ヘッダー。二重スラッシュは、「ノードの下のどこにでも一致」を意味するXPathです。-v //C
-v //D
テストファイルを使用して自分のシステムでテストした結果は、カンマ区切りの出力です。
ID,123
C,value1
D,value2
ヘッダーが必要ない場合は、-o <whatever>
パラメータを省略してください。
ありがとうこの記事説明する。