xsltを使用して動的テーブル(グリッド)を作成していますが、
XSLT :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:key name="RowAttribsByName" match="Row/@*"
use="concat(generate-id(..), '|', name())"/>
<xsl:variable name="vColNames" select=
"/*/Columns/*[not(@Hidden = 'true')]/@Name"/>
<xsl:template match="/*">
<table border="1">
<tr>
<xsl:apply-templates select="Columns/*"/>
</tr>
<xsl:apply-templates select="Rows/Row"/>
</table>
</xsl:template>
<xsl:template match="Column[not(@Hidden = 'true')]">
<td><xsl:value-of select="@Caption"/></td>
</xsl:template>
<xsl:template match="Row">
<tr>
<xsl:apply-templates select="$vColNames">
<xsl:with-param name="pRowId"
select="generate-id()"/>
</xsl:apply-templates>
</tr>
</xsl:template>
<xsl:template match="Column/@*">
<xsl:param name="pRowId"/>
<td width="50%">
<xsl:value-of select=
"key('RowAttribsByName',
concat($pRowId, '|', .)
)
"/>
</td>
</xsl:template>
</xsl:stylesheet>
XML データ :
<TableData>
<Columns>
<Column Name="ID" Hidden="true" />
<Column Name="Name" Caption="Item Name" Link="Yes" Sort="Yes"/>
<Column Name="Desc" Caption="Item Description" />
</Columns>
<Rows>
<Row ID="0" Name="A" />
<Row ID="1" Name="B" Desc="Some description"/>
<Row ID="3" Name="C" />
</Rows>
</TableData>
期待される出力:
<table border="1">
<tbody>
<tr>
<td>
<a onclick="javascript:SortColumn('Item Name')">Item Name</a>
</td>
<td>
<a onclick="javascript:SortColumn('Item Description')">Item Name</a></td>
</tr>
<tr>
<td width="50%">
<a onclick="javascript:OpenDifferentPage('A','0')">A</a>
</td>
<td width="50%"></td>
</tr>
<tr>
<td width="50%">B</td>
<td width="50%">Some description</td>
</tr>
<tr>
<td width="50%">C</td>
<td width="50%"></td>
</tr>
</tbody>
</table>
私は XSLT の初心者です。
ここで、列に「リンク」属性が「はい」の場合、アンカータグ(名前)の間にデータを表示する必要があることを確認したいと思います。
私はこのコラムで多くの複雑な機能を作成しています。したがって、ここで特定の列のテンプレートを作成できます(列は15ですが、ユーザーが表示用に8列を選択し、列の順序を維持する必要がある場合は、ユーザーの選択に依存します)
列のデータが渡されるように、列の順序を維持してすべての列の新しいテンプレートを作成できる場合が最善です。
ご期待いただきありがとうございます