Xml 按变量分组的每个分组的XSLT

Xml 按变量分组的每个分组的XSLT,xml,xslt,group-by,Xml,Xslt,Group By,我正在尝试为我的XSLT实现更灵活的groub by语句,使用变量(根据变量值,需要不同的分组): 。。。。。。。 ..... 据我所知,这种结构是行不通的(嗯,对我来说是行不通的) 我的问题是:如何通过属性将变量传递给group 提前感谢您提供的任何帮助。这里的问题不是“如何通过属性将变量传递给分组”,而是传递的变量的内容是什么。group by属性必须包含一个XPath表达式-您正在向它传递一个字符串值 如果只有两种方法可以对节点进行分组,我建议您使用以下构造: <xsl:for-e

我正在尝试为我的XSLT实现更灵活的groub by语句,使用变量(根据变量值,需要不同的分组):

。。。。。。。
.....
据我所知,这种结构是行不通的(嗯,对我来说是行不通的)

我的问题是:如何通过属性将变量传递给group

提前感谢您提供的任何帮助。

这里的问题不是“如何通过属性将变量传递给分组”,而是传递的变量的内容是什么。
group by
属性必须包含一个XPath表达式-您正在向它传递一个字符串

如果只有两种方法可以对节点进行分组,我建议您使用以下构造:

<xsl:for-each-group select="item" group-by="if($report_type='first_type') then concat(date,ccy) else concat(type,ccy)">

这里的问题不是“如何通过属性将变量传递给分组”,而是传递的变量的内容是什么。
group by
属性必须包含一个XPath表达式-您正在向它传递一个字符串

如果只有两种方法可以对节点进行分组,我建议您使用以下构造:

<xsl:for-each-group select="item" group-by="if($report_type='first_type') then concat(date,ccy) else concat(type,ccy)">

是的,group by表达式可以是一个变量引用,但是对于填充中的每个项目,它都具有相同的值,因此这是毫无意义的。这有点像说groupby=“42”

通常,如果分组键的计算过于复杂,无法内联到group by属性中,那么最好的解决方案是将其放入函数中,然后可以将其作为group by=“my:grouping key(.)”调用

我不相信这里是这样的。例如,你可以把它写成

group-by="concat(if ($report_type='first_type') then date else type, ccy)"

是的,GROUPBY表达式可以是一个变量引用,但是它对于填充中的每个项都有相同的值,所以这是毫无意义的。这有点像说groupby=“42”

通常,如果分组键的计算过于复杂,无法内联到group by属性中,那么最好的解决方案是将其放入函数中,然后可以将其作为group by=“my:grouping key(.)”调用

我不相信这里是这样的。例如,你可以把它写成

group-by="concat(if ($report_type='first_type') then date else type, ccy)"

你的问题是什么?哦,对不起。我的问题是:如何通过属性将变量传递给组?您的问题是什么?哦,对不起。我的问题是:如何将变量传递给group by属性?非常感谢您的帮助。非常感谢您的帮助。还感谢您对group-by中函数调用的评论。还感谢您对group by中函数调用的评论。