FC2ブログ

[xmllint] xml parse on bash

<XML解析ライブラリ xmllint>
■ インタラクティブ
xmllint --shell file.xml
にて xmllintを開始すると、インタラクティブモードにてxml解析が可能。
cat /xmlroot/xmltag
のように、
cat (xmllint 特有コマンド; Unix コマンドと重複) を用いて、xmltagを表示する。

■ 非インタラクティブ; --shell オプション
echo "cat /xmlroot/xmltag" | xmllint --shell file.xml"
にて xmllintを実行すると、非インタラクティブにxml解析が可能。
/ > cat /xmlroot/xmltag ------- <xmltag>content</xmltag> / >
のように、
xmllint 区切り文字及び入力コマンド、及び、xmltag 中身が標準出力に表示される。
→ シェルスクリプト及びプログラム側ではxmltag 中身だけが必要である事が多い為、
  この場合には、
  標準出力に表示される文字列を一旦文字列として変数に格納し、
  さらにこの文字列変数に対する文字列抽出 (整形含) 作業が別途必要となる。

■ 非インタラクティブ; --xpath
xmllint --xpath /xmlroot/xmltag file.xml
にて xmllintを実行すると、非インタラクティブにxml解析が可能。
<xmltag>content1</xmltag><xmltag>content2</xmltag> …
のように、
xmltag 名及び xmltag 中身が標準出力に表示される。複数要素を含む場合には複数表示される。
→ xmltag 名を含む為、文字列に対する文字列抽出 (整形含) 作業が別途必要になる。

xmllint --xpath /xmlroot/xmltag/text() file.xml
にて xmllintを実行すると、非インタラクティブにxml解析が可能。
content1content2 …
のように、
xmltag 中身が標準出力に表示される。複数要素を含む場合には複数表示される。
→ 改行を含まない為、文字列に対する文字列整形作業が別途必要となる。
  (text()を使用せず、xmltag 名にて文字列抽出後、改行付加 by sed)


参考文献:
■ The XML C parser and toolkit of Gnome - libxml
■ ShellScriptでXMLの内容を取り出す
■ jq、xmllintコマンドさようなら。俺はパイプが好きだから
■ 【Shell】XMLファイルから要素や属性を抽出する
■ 君は、grep -o オプションを知っているか?(grepでマッチした部分のみ抽出、後方参照の¥0)
スポンサーサイト