使用 XSLT 1.0 对值进行分组
Posted
技术标签:
【中文标题】使用 XSLT 1.0 对值进行分组【英文标题】:Group values with XSLT 1.0 【发布时间】:2016-01-25 05:41:34 【问题描述】:希望你能帮助我;
我有这个 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 表。现在我想按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
来做到这一点。
现在我的问题是;有人可以帮我实现这一点并稍微解释一下吗?
非常感谢您提前。
【问题讨论】:
你能告诉你输入的 XML 和在这种情况下你期望的输出吗?不要害怕 Muenchian Grouping 方法。如果您使用的是 XSLT 1.0,那么值得尝试和学习。请参阅 jenitennison.com/xslt/grouping/muenchian.html 了解其工作原理。 @TimC 谢谢鼓励,我自己搞定了 【参考方案1】:<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>
【讨论】:
谢谢你,照你的做,但是忘记贴了^^ 所以,你可以看到它很简单!以上是关于使用 XSLT 1.0 对值进行分组的主要内容,如果未能解决你的问题,请参考以下文章
如何在下面的 XSLT 1.0 代码中进行分组。需要按 TaxRateCode 分组