使用 XSLT 1.0 对值进行分组
Group values with XSLT 1.0
希望你能帮帮我;
我有这个 xsl 代码:
<xsl:for-each select="//DataSet">
<xsl:sort select="@wert"/>
<xsl:sort select="@key"/>
<tr>
<td><xsl:value-of select="@orig_pk"/></td>
<td><xsl:copy-of select="original"/></td>
<td><xsl:value-of select="@dup_pk"/></td>
<td><xsl:copy-of select="duplikat"/></td>
<td><xsl:value-of select="@key"/></td>
<td><xsl:value-of select="@wert"/></td>
</tr>
</xsl:for-each>
代码生成具有正确值的 HTML Table。现在我想按 key
对这些值进行分组,并在每个组上方呈现一个新的 <tr>
:
<tr>
<th class="data_header" align="left" nowrap="nowrap"><xsl:text>Schlüssel: </xsl:text><xsl:value-of select="@key"/></th>
</tr>
但是由于我们的系统只支持 XSLT 1.0,所以我不能使用 <xsl:for-each-group>
,而且我只能在 xsl 中做一些简单的事情,所以我无法使用 Muenchian method
.
现在我的问题是;有人可以帮助我了解这一点并稍微解释一下吗?
提前致谢。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<!-- this key allows us to quickly get a set of DataSet elements where @key equals to specified value -->
<xsl:key name="dataset-by-key" match="DataSet" use="@key"/>
<xsl:template match="/">
<!-- iterate over all DataSet elements and select only those that are first among others with the same @key value, i.e. tricky way to do grouping = Muenchian grouping -->
<xsl:for-each select="//DataSet[generate-id() = generate-id(key('dataset-by-key', @key)[1])]">
<xsl:sort select="@key"/>
<tr>
<th class="data_header" align="left" nowrap="nowrap">
<xsl:text>Schlussel: </xsl:text><xsl:value-of select="@key"/>
</th>
</tr>
<!-- according to definition of this key, key('dataset-by-key', @key) returns all DataSet elements where @key equals to specified value -->
<xsl:for-each select="key('dataset-by-key', @key)">
<xsl:sort select="@wert"/>
<tr>
<td><xsl:value-of select="@orig_pk"/></td>
<td><xsl:copy-of select="original"/></td>
<td><xsl:value-of select="@dup_pk"/></td>
<td><xsl:copy-of select="duplikat"/></td>
<td><xsl:value-of select="@wert"/></td>
</tr>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
希望你能帮帮我;
我有这个 xsl 代码:
<xsl:for-each select="//DataSet">
<xsl:sort select="@wert"/>
<xsl:sort select="@key"/>
<tr>
<td><xsl:value-of select="@orig_pk"/></td>
<td><xsl:copy-of select="original"/></td>
<td><xsl:value-of select="@dup_pk"/></td>
<td><xsl:copy-of select="duplikat"/></td>
<td><xsl:value-of select="@key"/></td>
<td><xsl:value-of select="@wert"/></td>
</tr>
</xsl:for-each>
代码生成具有正确值的 HTML Table。现在我想按 key
对这些值进行分组,并在每个组上方呈现一个新的 <tr>
:
<tr>
<th class="data_header" align="left" nowrap="nowrap"><xsl:text>Schlüssel: </xsl:text><xsl:value-of select="@key"/></th>
</tr>
但是由于我们的系统只支持 XSLT 1.0,所以我不能使用 <xsl:for-each-group>
,而且我只能在 xsl 中做一些简单的事情,所以我无法使用 Muenchian method
.
现在我的问题是;有人可以帮助我了解这一点并稍微解释一下吗?
提前致谢。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<!-- this key allows us to quickly get a set of DataSet elements where @key equals to specified value -->
<xsl:key name="dataset-by-key" match="DataSet" use="@key"/>
<xsl:template match="/">
<!-- iterate over all DataSet elements and select only those that are first among others with the same @key value, i.e. tricky way to do grouping = Muenchian grouping -->
<xsl:for-each select="//DataSet[generate-id() = generate-id(key('dataset-by-key', @key)[1])]">
<xsl:sort select="@key"/>
<tr>
<th class="data_header" align="left" nowrap="nowrap">
<xsl:text>Schlussel: </xsl:text><xsl:value-of select="@key"/>
</th>
</tr>
<!-- according to definition of this key, key('dataset-by-key', @key) returns all DataSet elements where @key equals to specified value -->
<xsl:for-each select="key('dataset-by-key', @key)">
<xsl:sort select="@wert"/>
<tr>
<td><xsl:value-of select="@orig_pk"/></td>
<td><xsl:copy-of select="original"/></td>
<td><xsl:value-of select="@dup_pk"/></td>
<td><xsl:copy-of select="duplikat"/></td>
<td><xsl:value-of select="@wert"/></td>
</tr>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>