XSLT

知能情報コース 今田 智大

XSLT とは

XSLT による変換の簡単な例

book.xml

<?xml version="1.0" encoding="UTF-8" ?> <?xml-stylesheet type="text/xsl" href="bookStyle.xsl" ?> <books xmlns:books="http://www.example.com/books"> <book isbn="978-7741-3031-6"> <!--ISBN-10:7741-3031-6--> <題名>必修 XML</題名> <著者>加山恵美</著者> <publisher>技術評論社</publisher> <price>2180 JPY</price> </book> </books>

XSLT による変換の簡単な例

bookStyle.xsl 実行結果

<?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <html> <head><title>変換テスト</title></head> <body> <table> <tr><td><xsl:value-of select="child::books/child::book/題名" /></td></tr> <tr><td><xsl:value-of select="child::books/book/@isbn" /></td></tr> <tr><td><xsl:value-of select="child::books/book/child::comment()" /></td></tr> <tr><td><xsl:value-of select="child::books/book/publisher/../著者" /></td></tr> </table> </body> </html> </xsl:template> </xsl:stylesheet>

XSLT による変換の手順

XSLT による変換は以下のように行われる。

  1. XSLT スタイルシートを読み込み、テンプレートの探索
  2. XML 文書をたどり、 テンプレート内の XPath で指定されたノードを選択
  3. テンプレートで指定された処理を実行
  4. 2~4を XML 文書の最後まで繰り返す
  5. 変換された文書を出力

XPath とは

XSLT と XPath の歴史

ノードで考えた時の XML 文書の構造

ノードを指定する書式

ロケーションパス

ロケーションステップ

ロケーションパスの例

child::hogehoge/attribute::foo

親子関係の軸

親子関係の軸

隣接関係の軸

隣接関係の軸

ノードテスト

述語と省略形

述語

省略形

軸とノード 省略形
child:: 丸ごと省略可能
attribute:: @
self::node() .
parent::node() ..
descendant-or-self:: //

XPath の関数

関数の種類 関数の役目
ノードセット関数 ノードから情報を取得
文字列関数 文字列の処理
ブール関数 真偽値に関する処理
数値関数 数値の簡単な処理

XSLT のテンプレート

テンプレートルールの一例

<xsl:template match="/"> <hoge><xsl:value-of select="foo/bar"/></hoge> </xsl:template>

XSLT のテンプレート

条件分岐、繰り返し

条件分岐 (xsl:if 要素 )

<xsl:if test="式">真の場合の処理</xsl:if>

条件分岐 (xsl:choose 要素 )

<xsl:choose> <xsl:when test="式">真の場合の処理</xsl:when> <xsl:otherwise test="式">真の場合の処理</xsl:otherwise> </xsl:choose>

繰り返し (xsl:for-each 要素 )

<xsl:for-each select="式">繰り返し処理</xsl:for-each>

テンプレートを使ってできること

まとめ