コマンドライン上での XML 文書の編集
ちょっとした XML の編集
どうやら XMLStarlet が良いらしい。
sed で引っ掛けようとしてもタグの重複なんて沢山あるし…
データの置換(update)
削除、挿入、追記…と一般的な操作は網羅しているようだけれど、今回欲しかったのは置換(update? replace?)の操作だったのでその説明。
XPath で場所を指定して値をセットすれば終了!
$ xmlstarlet ed -u "[XPath]" -v [置換する値] [ファイル名]
実行例
以下の様な XML を例として説明。
<!-- hoge.xml --> <xml> <table> <elm id="0"> <number>000</number> <name>Rocking Horse Fly</name> </elm> <elm id="1"> <number>111</number> <name>Snap-Dragonfly</name> </elm> </table> </xml>
属性値の置換例
コマンド
$ xmlstarlet ed -u "/xml/table/elm[@id=1]/@id" -v 2 hoge.xml
結果
<!-- hoge.xml --> <xml> <table> <elm id="0"> <number>000</number> <name>Rocking Horse Fly</name> </elm> <!-- 1 -> 2 --> <elm id="2"> <number>111</number> <name>Snap-Dragonfly</name> </elm> </table> </xml>
要素の内容の置換例
コマンド
xmlstarlet ed -u "/xml/table/elm[@id=1]/name" -v "Bread and Butterfly" hoge.xml
結果
<!-- hoge.xml --> <xml> <table> <elm id="0"> <number>000</number> <name>Rocking Horse Fly</name> </elm> <elm id="1"> <number>111</number> <!-- Snap-Dragonfly -> Bread and Butterfly --> <name>Bread and Butterfly</name> </elm> </table> </xml>