- - PR -
XML文書をXSLTでHTMLへ変換
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-01-07 18:03
はじめまして、長文失礼します。
XML文書をXSLTを使用してHTMLに変換して居ります。 以下のXML文書のoption要素のcolname属性に 対応するbook要素の各属性値を、 option要素のorder属性の順番で 左から順に並べて表を作りたいと思って居ります。 <root> <option order="1" colname="name" /> <option order="3" colname="price" /> <option order="2" colname="author" /> <book name="健康の極意" price="1500" author="中村" /> <book name="3分ダイエット" price="1300" author="鈴木" /> </root> 上記XMLから下記の表を作成したい。 name | author | price 健康の極意 | 中村 | 1500 3分ダイエット | 鈴木 | 1300 以下のXSLTで、ヘッダー行の作成までは出来たのですが、 データ行の作成に苦労して居ります。 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <html> <head> <title>テスト</title> </head> <body> <table border="1"> <tr> <xsl:apply-templates select="root" /> </tr> </table> </body> </html> </xsl:template> <xsl:template match="root"> <!--ヘッダ行の作成--> <xsl:for-each select="option"> <!--order属性順に左から項目を並べるためのソート処理--> <xsl:sort select="@order" data-type="number" order="ascending" /> <th> <xsl:value-of select="@colname" /> </th> </xsl:for-each> <!--データ行の作成--> <xsl:for-each select="book"> <tr> <td> <xsl:value-of select="@author" /> </td> <td> <xsl:value-of select="@price" /> </td> <td> <xsl:value-of select="@name" /> </td> </tr> </xsl:for-each> </xsl:template> </xsl:stylesheet> データ行の作成部分に関して、 option要素のorder属性の値によって、 xsl:value-of要素のselect属性に 渡す値(@author、@price、@name)の順番を 動的に変える事が出来れば良いと思うのですが、 実現方法がわからず、困って居ります。 どなたか知恵を貸していただけないでしょうか? XMLの表示にはIE6を使用して居ります。 |
|
投稿日時: 2006-01-08 12:12
<!-- [ヘッダ→明細]行の作成-->
●<xsl:variable name="boo" select="."/><!-- bookのカレントを握っておく --> <xsl:for-each select="option"> <!--order属性順に左から項目を並べるためのソート処理--> <xsl:sort select="@order" data-type="number" order="ascending" /> <td> ●<xsl:value-of select="$boo/@*[name() = current()/@colname]" /> </td> </xsl:for-each> では。同じソートの繰り返しは 最適化で除去されるかは不明。 |
|
投稿日時: 2006-01-11 10:40
MMX様
アドバイス下さり、誠にありがとう御座いました。 おかげさまで希望通りの変換が出来ました。 データ作成部を以下の様に変更しました。 <!--データ行の作成--> <xsl:for-each select="book"> <xsl:variable name="boo" select="."/><!-- bookのカレントを握っておく --> <tr> <xsl:for-each select="../option"> <xsl:sort select="@order" data-type="number" order="ascending" /> <td> <xsl:value-of select="$boo/@*[name() = current()/@colname]" /> </td> </xsl:for-each> </tr> </xsl:for-each> |
1