XPathによる
部分指定

XML文書の一部分を指定 - XPath

テンプレート適用先をselect属性で指定していますが、 その書き方はXPathという仕様に基づいています。

相対位置指定

.
カレントノード
要素名A
カレントノードの子要素である要素A
要素名A/要素名B
その要素Aの子要素である要素B
要素名A//要素名C
カレントノードの子要素である要素Aの子孫要素C
要素名A/@属性名D
カレントノードの子要素である要素Aの属性D

"festivals"は、この場合のカレントノード"/"の子要素になります。

絶対位置指定

/
ルートノード
/要素名A
ルート要素A
/要素名A/要素名B
ルート要素Aの子要素である要素B
//要素名C
文書内のすべての要素C
/要素名A/要素名B/@属性D
ルート要素Aの子要素である要素Bの属性D

カレントノードが"/"の場合の"festivals"は、"/festivals"とも書けるわけです。 ディレクトリの相対/絶対パスと同じ話です。

条件によるノードの絞り込み

XPathでは、条件を付加することによりマッチする要素を絞り込むことができます。 それをうまく使うと、XSLT のプログラムをスマートに記述することができます。

名前空間接頭辞の扱い (参考)

変換対象の要素などが「artist:name」のように名前空間接頭辞つきの場合、 そのまま「接頭辞:名前」の形式で記述します。 そのため、接頭辞の定義である xmlns:接頭辞="〜" を、 xsl:stylesheet 要素の属性として記述しておく必要があります (変換対象のXML文書からコピーしてくればよいでしょう)。

データの取り出し (復習)

value-of や copy-of の対象を指定するために select 要素で選択しますが、 この select 要素の値は XPath です。

テキストの取り出し

XPathで指定したノード以下からテキストを取り出すことができます。

  <xsl:value-of select="式"/>

要素の取り出し

XPathで指定したノード以下のすべてを出力文書にコピーすることができます。

  <xsl:copy-of select="式"/>

演習 これまで作成してきたXSLTファイルを、複数テンプレートを使うものに書き換えてみましょう。 複数存在する要素に対して apply-templates を行うことにより、 これまでできなかった繰り返し処理が可能になります。