我正在尝试为我的XSLT实现更灵活的groub-by语句,使用变量(取决于变量值,需要不同的分组):
.......
<xsl:param name="rows"/>
<xsl:variable name="groupBy">
<xsl:choose>
<xsl:when test="$report_type='first_type'">
<xsl:value-of select="concat(date,ccy)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat(type,ccy)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:for-each-group select="$rows" group-by="$groupBy">
.....
</xsl:for-each-group>
据我所知,这种结构不起作用(好吧,它对我没用)。
我的问题是:如何将变量传递给group-by属性?
提前感谢您提供任何帮助。
答案 0 :(得分:3)
这里的问题不是“如何将变量传递给group-by属性”,而是传递的变量的内容是什么。 group-by
属性必须包含XPath 表达式 - 您传递的是字符串值。
如果只有两种方法对节点进行分组,我建议您使用以下构造:
<xsl:for-each-group select="item" group-by="if($report_type='first_type') then concat(date,ccy) else concat(type,ccy)">
答案 1 :(得分:3)
是的,group-by表达式可以是变量引用,但是它对于总体中的每个项都具有相同的值,因此这是非常没有意义的。这有点像分组来说&#34; 42&#34;。
一般情况下,如果分组键的计算过于复杂而无法在group-by属性中内联,则最佳解决方案是将其置于函数中,然后可以将其称为group-by =&#34;我的:(。)。分组密钥&#34;
我不相信这里的情况。你可以写这个,例如,
group-by="concat(if ($report_type='first_type') then date else type, ccy)"