検索
連載

XML文書からソーティングされた一覧表を作成するXMLテクニック集(2)(2/3 ページ)

Share
Tweet
LINE
Hatena

文章の一部分を強調文字で出力する

アイコン

XSLTは、XML文書中の特定のキーワードを強調表示にするといった、非定型データの処理にも対応できる柔軟性を備えています。ここではそうしたデータ処理の方法を紹介します。

カテゴリ XSLT、.NET
関連要素 <xsl:apply-templates>、<xsl:template>

 「XML文書からソーティングされた一覧表を作成する」で紹介したように、XSLTスタイルシートは定型的な(データベース的な)XML文書を容易に加工することができます。

 しかし、XSLTスタイルシートの真の強みとは、そうした定型データの処理にのみあるわけではありません。文書の中にイレギュラーに発生する要素を処理する、といったような非定型データの処理においてこそ、XSLTの記述の柔軟性を感じることができるでしょう。

 以下では、<description>要素配下のテキスト内に任意に埋め込まれた<keywd>要素部分を強調文字(ボールド体)に変換・出力するテクニックを紹介します。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


 上記のbooks.xmlが元のデータで、これを加工するのが下記のXSLTスタイルシートです。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


 XSLTスタイルシートを適用した結果は下記のようになります。

&lt;keywd&gt;要素で囲まれた部分が強調表示される
<keywd>要素で囲まれた部分が強調表示される

 ここでのポイントは、以下の部分です。

*** 一部省略されたコンテンツがあります。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.

ページトップに戻る