XSLT 中的组相邻功能

Sti*_*ing 4 xslt xslt-2.0 xslt-grouping

我有一个关于使用的问题group-adjacent

我看到使用了两种模式:

模式一:

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

模式2:

<xsl:for-each-group select="*" group-adjacent="@class">
Run Code Online (Sandbox Code Playgroud)

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

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

Mar*_*nen 5

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

所以这取决于您的需求,如果您有例如

<items>
  <item class="c1">...</item>
  <item class="c1">...</item>
  <item class="c2">...</item>
</items>
Run Code Online (Sandbox Code Playgroud)

您可以使用第二种方法对class值进行分组。

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

<body>
  <h1>...</h1>
  <p class="code">...</p>
  <p class="code">...</p>
  <h2>...</h2>
  <p class="code">...</p>
</body>
Run Code Online (Sandbox Code Playgroud)

那么第一种方法允许这样做。