170 likes | 386 Views
XSLT. 2002 年 7 月 5 日 上牧瀬 誠. XSLT とは. XML Stylesheet Language Transformation ある XML ドキュメントを別の XML ドキュメント, HTML ドキュメントなどに変換するための言語. XML ドキュメント. XML ドキュメント. XSLT. XSLT. HTML ドキュメント. XSLT スタイルシートの構造. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
E N D
XSLT 2002年7月5日 上牧瀬 誠
XSLTとは • XML Stylesheet Language Transformation • あるXMLドキュメントを別のXMLドキュメント,HTMLドキュメントなどに変換するための言語 XML ドキュメント XML ドキュメント XSLT XSLT HTML ドキュメント
XSLTスタイルシートの構造 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:stylesheet> • versionはxslのバージョンを指定する • xmlnsは名前空間を指定する この部分に変換のための規則を書く
XMLの例(sample.xml) • サンプルとして次のXMLをHTMLに変換することを考える <?xml version="1.0" encoding="Shift_JIS"?> <?xml-stylesheet type="text/xsl" href="sample.xsl"?> <team> <name>チームA</name> <member> <name>選手A</name> <number>1</number> <color>red</color> </member> <member> <name>選手B</name> <number>3</number> <color>blue</color> </member> <member> <name>選手C</name> <number>2</number> <color>green</color> </member> </team>
xsl:template • テンプレートのルールを適用させる条件を指定する <xsl:template match=pattern> <!-- テンプレートの内容 --> </xsl:template> • 例 <xsl:template match="/"> • ルートノード以下にルールを適用させる • sample.xmlでは<team>がルートノードになる
xsl:value-of • selectで指定された値に置き換える <xsl:value-of select=expression /> • 例 <xsl:value-of select="team/name" /> • team/nameの値に置き換える • sample.xmlでは,次のように表示される チームA
xsl:attribute • タグの属性値を指定する <xsl:attribute name="属性名"> 属性値 </xsl:attribute> • 例 <font> <xsl:attribute name="color">red</xsl:attribute> <xsl:value-of select="team/name"/> </font> • <font>の属性colorにredを指定する • 次のように解釈される <font color="red">チームA</font> • sample.xmlでは,次のように赤い文字で表示される チームA
xsl:variable • 変数を宣言する <xsl:variable name=qname select=expression/> • 例 <xsl:variable name="チーム名" select="/team/name"/> <xsl:value-of select="$チーム名"/> • sample.xmlでは, 次のように表示される チームA • 宣言した変数を使うときには,$変数名とする
xsl:for-each • テンプレートのルールを,指定した各要素に対して適用する <xsl:for-each select=node-select-expression> <!-- 各要素に対して適用するテンプレートの内容 --> </xsl:for-each> • 例 <xsl:for-each select="team/member"> <xsl:value-of select="name"/><br/> </xsl:for-each> • team/memberのすべてに対して,nameを表示する • sample.xmlでは,次のように表示される 選手A 選手B 選手C
xsl:if • 条件をテストし,テストした結果が真である場合,テンプレートのルールを要素に対して適用する <xsl:if test=boolean-expression> <!-- テンプレートの内容 --> </xsl:if> • 例 <xsl:for-each select="team/member"> <xsl:if test="number!=2"> <xsl:value-of select="name"/><br/> </xsl:if> </xsl:for-each> • sample.xmlでは,次のように表示される 選手A 選手B • 選手Cは,number!=2を満たさないので表示されない
xsl:choose • 条件に応じた処理を行う <xsl:choose> <xsl:when test=boolean-expression> <!-- テストの結果が真であるときに適用するテンプレート --> </xsl:when> <xsl:otherwise> <!– どのテストの結果も真でないときに適用するテンプレート --> </xsl:otherwise> </xsl:choose>
xsl:choose • 例 <xsl:for-each select="team/member"> <font> <xsl:attribute name="color"> <xsl:choose> <xsl:when test="number=1">red</xsl:when> <xsl:when test="number=2">blue</xsl:when> <xsl:otherwise>black</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:value-of select="name"/><br/> </font> </xsl:for-each> • sample.xmlでは,次のように表示される 選手A 選手B 選手C
xsl:sort • xsl:apply-templatesまたはxsl:for-eachの子要素として使い,次の形式で結果をソートする方法を指定する <xsl:sort select=string-expression lang={nmtoken} data-type={"text"|"nunber"|"qname-but-not-cname"} order={"ascending"|"descending"} case-order={"upper-first"|"lower-first"}/>
xsl:sort • 例 <xsl:for-each select="team/member"> <xsl:sort select="number" data-type="number" order="ascending"/> <xsl:value-of select=“number”/>, <xsl:value-of select="name"/>< br/> </xsl:for-each> • sample.xmlでは,次のように表示される 1,選手A 2,選手C 3,選手B • team/member/numberで昇順にソートされ表示される
XSLの例(sample.xsl) <?xml version="1.0" encoding="Shift-JIS"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> </head> <body> <h1><xsl:value-of select="team/name"/></h1> <table border="1"> <tr> <td>選手名</td> <td>背番号</td> </tr>
XSLの例(sample.xsl) <xsl:for-each select="team/member"> <xsl:sort select="number" data-type="number" order="ascending"/> <tr> <td> <font> <xsl:attribute name="color"><xsl:value-of select="color"/></xsl:attribute> <xsl:value-of select="name"/> </font> </td> <td> <xsl:variable name="背番号" select="number"/> <xsl:value-of select="$背番号"/> </td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
実行結果 • sample.xmlにsample.xslを適用した結果は,次のようにブラウザに表示される