- blogs:
- cles::blog
2013/12/05

シェルスクリプトで XML を処理する



先日、JSON をシェルスクリプトで処理する方法をやりましたが、XML についてもツールがあるのでまとめておきます。
コマンドラインから XML を扱うツールとしては CPAN に XML-XPath*1 というモジュールがあり、これに付属している xpath というコマンドを使う手もあるのですが、出力のフォーマットにあまり融通が利かないので、sed や awk で加工する必要があります。今回はそれがイヤなので、XMLStarlet を使う方法をメモしておきます。
† インストール
CentOS であれば yum install xmlstarlet でインストールできます。
† 使い方
使い方はこんな感じ。 サンプルは以前に使ったもの。
$ echo "<a><b><c>1111</c><d>a1</d></b><b><c>2222</c><d>a2</d></b></a>" | xmlstarlet sel -t -v "//b[./c/text() = '2222']/d"
a2
$ echo "<a><b><c>1111</c><d>a1</d></b><b><c>2222</c><d>a2</d></b></a>" | xmlstarlet sel -t -m "//c" -v "concat(position(),':',.,'
')"
1:1111
2:2222
-m でノードを選択して、-v (--value-of) で表示するという感じになります。
XPath や XSL に馴染んでいればかなりカスタマイズが利くので便利です。
† XSLT 出力でさらにカスタマイズ
さらに -C オプションをつけると変換に使った XSLT を表示させることができます。
これを元にさらにカスタマイズした出力を行う事も簡単にできますね。
$ echo "<a><b><c>1111</c><d>a1</d></b><b><c>2222</c><d>a2</d></b></a>" | xmlstarlet sel -C -t -m "//c" -v "concat(position(),':',.,'
')"
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exslt="http://exslt.org/common"
xmlns:math="http://exslt.org/math"
xmlns:date="http://exslt.org/dates-and-times"
xmlns:func="http://exslt.org/functions"
xmlns:set="http://exslt.org/sets"
xmlns:str="http://exslt.org/strings"
xmlns:dyn="http://exslt.org/dynamic"
xmlns:saxon="http://icl.com/saxon"
xmlns:xalanredirect="org.apache.xalan.xslt.extensions.Redirect"
xmlns:xt="http://www.jclark.com/xt"
xmlns:libxslt="http://xmlsoft.org/XSLT/namespace"
xmlns:test="http://xmlsoft.org/XSLT/"
extension-element-prefixes="exslt math date func set str dyn saxon xalanredirect xt libxslt test"
exclude-result-prefixes="math str">
<xsl:output omit-xml-declaration="yes" indent="no"/>
<xsl:param name="inputFile">-</xsl:param>
<xsl:template match="/">
<xsl:call-template name="t1"/>
</xsl:template>
<xsl:template name="t1">
<xsl:for-each select="//c">
<xsl:value-of select="concat(position(),':',.,'
')"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/6313
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
サイト内検索
検索ワードランキング
へぇが多いエントリ
閲覧数が多いエントリ
1 . アーロンチェアのポスチャーフィットを修理(112084)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110715)
3 . 年次の人間ドックへ(110328)
4 . 2023 年分の確定申告完了!(1つめ)(109875)
5 . 三菱鉛筆がラミーを買収(109783)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110715)
3 . 年次の人間ドックへ(110328)
4 . 2023 年分の確定申告完了!(1つめ)(109875)
5 . 三菱鉛筆がラミーを買収(109783)
cles::blogについて
Referrers