XSLT中的组邻接功能

时间:2015-04-22 16:59:31

标签: xslt xslt-2.0 xslt-grouping

我对group-adjacent的使用有疑问。

我见过两种模式:

模式1:

<xsl:for-each-group select="*" group-adjacent="boolean(self::p[@class = 'code'])">

模式2:

<xsl:for-each-group select="*" group-adjacent="@class">

根据使用的内容,我注意到current-grouping-key()返回false。

在group-adjancent中使用布尔函数的目的是什么?

2 个答案:

答案 0 :(得分:4)

使用表单<xsl:for-each-group select="*" group-adjacent="boolean(self::p[@class = 'code'])">,分组键是一个布尔值,对于具有p属性值为class的相邻code元素为true,而第二种形式为{ {1}}分组值是一个字符串,并将具有相同<xsl:for-each-group select="*" group-adjacent="@class">属性值的所有相邻元素分组。

所以这取决于你的需要,如果有的话。

class

您可以使用第二种方法对<items> <item class="c1">...</item> <item class="c1">...</item> <item class="c2">...</item> </items> 值进行分组。

另一方面,如果您要识别具有特定class属性的相邻p元素,例如在

class

然后第一种方法允许。

答案 1 :(得分:2)

  

根据使用的内容,我注意到current-grouping-key()返回一个   假的。

current-grouping-key()返回true或false,具体取决于当前组。在您的第一个示例中,current-grouping-key()对于类&#34;代码&#34;的任何相邻p元素组都是true,对于其他组是false。

  

在group-adjancent中使用布尔函数的目的是什么?

如果没有这个,分组键将是评估表达式self::p[@class = 'code']的结果,该表达式返回一个空序列,这反过来会导致错误。