文章の一部分を強調文字で出力する
「XML文書からソーティングされた一覧表を作成する」で紹介したように、XSLTスタイルシートは定型的な(データベース的な)XML文書を容易に加工することができます。
しかし、XSLTスタイルシートの真の強みとは、そうした定型データの処理にのみあるわけではありません。文書の中にイレギュラーに発生する要素を処理する、といったような非定型データの処理においてこそ、XSLTの記述の柔軟性を感じることができるでしょう。
以下では、<description>要素配下のテキスト内に任意に埋め込まれた<keywd>要素部分を強調文字(ボールド体)に変換・出力するテクニックを紹介します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
上記のbooks.xmlが元のデータで、これを加工するのが下記のXSLTスタイルシートです。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
XSLTスタイルシートを適用した結果は下記のようになります。
ここでのポイントは、以下の部分です。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
<xsl:apply-templates>要素は、select属性で指定された要素ノードに対応(マッチ)するテンプレートを適用します。例えば今回の例のようなケースでは、多くの場合、<description>要素は<xsl:template match="description">で定義されたテンプレートで処理されます。
しかし、このdescription.xslには<xsl:template match="description">で定義されたテンプレートはありません。その場合には、その子ノード(つまり、<keywd>要素とテキストノード)に合致するテンプレートが検索されます。それらのテンプレートが定義されているのが以下の部分です。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
<keywd>要素に合致した場合には、その内容を<span>タグで囲み、ボールド体に加工したうえで出力します。「text()」はテキストノードを表します。テキストノードに合致した場合、その内容はそのまま出力します。いずれも<xsl:value-of>要素のselect属性で指定した「.」はカレントノード(現在、指し示しているノード)を表します。
多くの場合、XSLTスタイルシートの処理というと、同階層に並んだ要素群を順に出力していく、いわばデータベース的な処理に傾きがちなものです。XSLTがそうした定型的なフォーマットに対応しているのはもちろんですが、こうした非定型的な(フォーマットが定まらない)文書に対しても柔軟な加工ができるのが、大きな強みでもあります。
少々複雑なテクニックだったかもしれませんが、これを応用すれば、文書の中の一部分だけにリンクを生成したり、色を変えたりといった処理も容易に行うことができますので、ぜひともきちんと理解しておきたいテクニックです。
Copyright © ITmedia, Inc. All Rights Reserved.