連載 .NETで簡単XML 第6回 .NETプログラムでXSLTスクリプトを使う株式会社ピーデー 川俣 晶2003/07/08 |
|
|
■XSLTミニ入門その1 要素に対応する出力
まず、Visual Studio .NET 2003を使わないシンプルな世界でXSLTを利用してみよう。以下のサンプルはInternet Explorer 6で利用されることを前提としたものである。例示されたXML文書をInternet Explorer 6で開くと、XSLTスクリプトが動作して結果を表示するようになっている。
まず最初のサンプルは、指定された要素の内容をHTML文書として出力するものである。
|
|
Internet Explorer 6で開くXML文書(sample01.xml) | |
今回紹介するXML文書とXSLTスクリプトのサンプルはこちらからダウンロードできる。 |
|
|
指定された要素の内容をHTML文書として出力するXSLTスクリプト(sample01.xslt) |
XML文書sample01.xmlをInternet Explorerで開くと以下のようになる。
Internet Explorer 6でsample01.xmlを開いたところ |
XSLTスクリプトsample01.xsltによって出力されたHTML文書が表示される。 |
それでは、どうしてこのような結果が得られるのか。その内容を説明しよう。
まず重要なのは、あるXML文書を表示する際に使用されるXSLTスクリプトを指定する方法である。これは、XML文書に含まれる<?xml-stylesheet href="sample01.xslt" type="text/xsl"?>という部分が相当する。ここは、この連載の主題とは関係ない部分なので、詳しく解説はしない。ここでは、「href=」に続く部分の引用符内に、XSLTスクリプトのURLを書き込むと思ってもらえれば問題ないだろう。
次はいよいよ本題となるXSLTスクリプトを説明する。まず、XSLTスクリプトもXML文書の一種であることを確認しよう。XSLTスクリプトはXML文書が守るべきあらゆるルールに従う必要がある。そのため、先頭にも正しいXML宣言が付加されている。XSLTもXMLで作られた言語である以上、固有の名前空間URIを持っている。それが、http://www.w3.org/1999/XSL/Transformである。この名前空間URIは、xslという接頭辞に割り当てて使うことが多い。XSLTスクリプトは、xsl:stylesheet要素を文書要素として使う。この要素には、version="1.0"という属性を付けておく。
次に、xsl:output要素が記述されているが、これは出力の形式を指定するものである。method属性の値が「html」ならHTMLに、「xml」ならXMLとなる。
さて、次からが最も本質的な変換本体についての説明である。
続く部分には、xsl:template要素が2つ書かれている。この要素は変換ルールを記述する。変換ルールを発動する条件は、match属性に書かれたXPath式で指定される。そして、出力される内容は、この要素の内容で示される。最初のxsl:template要素の場合、条件はnameという要素が発見された場合であり、出力される内容は、
<p>指定された人名は<xsl:apply-templates />です。</p>
という部分で示されるものである。この中で、テキストはそのまま出力される。<p>のようなXSLTの名前空間に属さない要素はそのまま出力される。xsl:apply-templates要素は、そのテンプレート(xsl:template要素)が対象としたノードの子らにさらにテンプレートを適用することを意味している。この場合、name要素の子には人名が書かれたテキストがあるはずである。テキストはそのまま出力するという暗黙のデフォルト・ルールがあるので、人名はそのまま出力される。つまり、
<p>指定された人名は<xsl:apply-templates />です。</p>
という部分は、人名が「間宮林蔵」なら、
<p>指定された人名は間宮林蔵です。</p>
という出力になるわけである。
2番目のxsl:template要素も、同じようなものであるが、match属性の値として書かれたXPath式が“/”であることに注目していただきたい。これはルート・ノードを示すXPath式であるが、それだけでなく、XSLTでは必ず最初に処理されるテンプレートであるという役割を持っている。つまり、このスクリプトを実行する際、最初に処理されるのはこのテンプレートである。
次に、
<xsl:apply-templates select="/database/person/name" />
という部分に注目していただきたい。前に出たxsl:apply-templates要素は、そのノードの子ノードにテンプレートを適用させる機能を持っていたが、これはちょっと違う。select属性が付いたxsl:apply-templates要素は、この属性で指定されたXPath式が示すノードに対して、テンプレートを適用させるのである。ここでは/database/person/nameというXPath式に該当する要素に対して、テンプレートが適用される。実際に適用されるテンプレートは、最初のname要素に対するテンプレートである。このXPath式に対応する要素は2つあるので、name要素に対するテンプレートは2回処理され、結果として、2つの人名が出力されているというわけである。
ここで注意してほしいことは、すべてのノードが無条件にテンプレート適用の対象になっていないということである。例えば、このXML文書には2つのbirth要素が含まれているが、それに対してテンプレートの適用ができるかチェックされることはない。それは、xsl:apply-templates要素のselect属性で、対象を明示的に指定したことによる必然的な結果なのである。
INDEX | ||
.NETで簡単XML | ||
第6回 .NETプログラムでXSLTスクリプトを使う | ||
1.XSLTとは何か | ||
2.XSLTミニ入門その1 要素に対応する出力 | ||
3.XSLTミニ入門その2、3 属性に対応する出力/XPath式の値を出力 | ||
4.プログラムでXSLTを処理/プログラム内のデータを変換 | ||
5.XPathDocumentで処理を高速化/XSLTにプログラムを埋め込む | ||
「連載 :.NETで簡単XML」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|