連載

.NETで簡単XML

第6回 .NETプログラムでXSLTスクリプトを使う

株式会社ピーデー 川俣 晶
2003/07/08

■XSLTミニ入門その2 属性に対応する出力

 XSLTでは、要素だけでなく属性も扱うことができる。それには特に難しいことはなく、XPath式中で属性の名前の手前に@記号を付けて、属性であることを示すだけでよい。実際にそれを行った例を次に示す。

<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet href="sample02.xslt" type="text/xsl"?>
<database>
  <person name="伊能忠敬">
    <birth>1745</birth>
  </person>
  <person name="間宮林蔵">
    <birth>1775</birth>
  </person>
</database>
処理するXML文書(sample02.xml)
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
             xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="html" />

  <xsl:template match="@name">
    <p>指定された人名は<xsl:value-of select="." />です。</p>
  </xsl:template>

  <xsl:template match="/">
    <html>
      <head>
        <title>人名の表示</title>
      </head>
      <body>
        <h1>人名の表示</h1>
        <xsl:apply-templates select="/database/person/@name" />
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>
属性を扱うXSLTスクリプト(sample02.xslt)

 XML文書sample02.xmlをInternet Explorerで開くと以下のようになる。

Internet Explorer 6でsample02.xmlを開いたところ
XSLTスクリプトsample02.xsltでは、人名部分を属性で指定して出力している。

 これは複雑な説明は必要ないだろう。最初の例のname要素を属性に置き換えたものである。属性であっても、XPath式で指定できるものは、要素と同じように指定することができる。

■XSLTミニ入門その3 XPath式の値を出力

 ここまで見てきた例は、xsl:apply-templates要素のselect属性を用いて、テンプレートを適用させるものであった。しかし、テンプレートを適用するのではなく、ただ単に式の値が出力できればよいこともある。例えば、先ほどの例では、人名は単なるテキストであって、それに対して複雑なテンプレートを適用させなくてもよい。そのような場合には、xsl:value-of要素を使うことができる。以下はそれを使った例である。

<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet href="sample03.xslt" type="text/xsl"?>
<database>
  <person>
    <name>伊能忠敬</name>
    <birth>1745</birth>
  </person>
  <person>
    <name>間宮林蔵</name>
    <birth>1775</birth>
  </person>
</database>
処理するXML文書(sample03.xml)
 
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
             xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="html" />

  <xsl:template match="/">
    <html>
      <head>
        <title>人名の表示</title>
      </head>
      <body>
        <h1>人名の表示</h1>
        <p>1人目の人名は<xsl:value-of select="(/database/person/name)[1]" />です。</p>
        <p>2人目の人名は<xsl:value-of select="(/database/person/name)[2]" />です。</p>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>
XSLTスクリプト(sample03.xslt)

 XML文書をInternet Explorerで開くと以下のようになる。

Internet Explorer 6でsample02.xmlを開いたところ
XSLTスクリプトsample03.xsltでは、select属性で指定したXPath式の内容をそのまま出力する。

 ここでポイントになるのは、もちろんxsl:value-of要素である。この要素は、select属性で指定されたXPath式の内容をテキストとしてそのまま出力する。ここでは、2つのxsl:value-of要素が記述されているが、それぞれ、1つのname要素を指定する式が指定されている。式で指定されたものはname要素ではあるが、実際に出力されるのは、その内容のテキストのみである。要素の開始タグや終了タグは出力されず、テキストだけが文字列として出力される。

 このように、xsl:apply-templates要素とxsl:value-of要素は、それぞれ異なる機能を持っていて、異なる場面で活用される。この2つをうまく使い分けることが、XSLTを使いこなす上での面白さの1つである。


 INDEX
  .NETで簡単XML
  第6回 .NETプログラムでXSLTスクリプトを使う
    1.XSLTとは何か
    2.XSLTミニ入門その1 要素に対応する出力
  3.XSLTミニ入門その2、3 属性に対応する出力/XPath式の値を出力
    4.プログラムでXSLTを処理/プログラム内のデータを変換
    5.XPathDocumentで処理を高速化/XSLTにプログラムを埋め込む
 
インデックス・ページヘ  「連載 :.NETで簡単XML」


Insider.NET フォーラム 新着記事
  • 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間