父组的 XSLT 分组键

XSLT grouping-key of the parent group

我有 3 个嵌套的 xsl:for-each-group 语句,我正在使用一个变量来存储父级的 current-grouping-key(),因为我在最后一个 for-each- 中需要这个值组作为过滤器。但我想知道是否无法在不声明特定变量的情况下以其他方式访问父项的当前分组键?

示例:

<xsl:for-each-group select="//results/result[measuring_plane != '']" group-by="inspection_feature">

  <xsl:variable name="v_current_inspection_feature" select="inspection_feature" as="xs:string"/>

  <xsl:for-each-group select="//results/result[inspection_feature = current-grouping-key() and measuring_plane != '']" group-by="description">

    <xsl:for-each-group select="//results/result[inspection_feature = $v_current_inspection_feature and description = current-grouping-key() and measuring_plane != '']" group-by="step">

解决方案:

<xsl:for-each-group select="//results/result[measuring_plane != '']" group-by="inspection_feature">
  <xsl:for-each-group select="current-group()" group-by="description">
    <xsl:for-each-group select="current-group()" group-by="step">

对嵌套的 for-each-group 指令使用 select="current-group()"

补充 Martin Honnen 在他的回答中写的内容:

xsl:for-each-group指令中,当前组的第一项是上下文项。当然,上下文项与组的其余部分具有相同的分组键表达式值。

这意味着在你的例子中,先按inspection_feature分组,再按description分组后,你可以参考inspection_feature获取分组键值先分组and to description得到当前分组key的值

但是,如果这样做的唯一目的是select当前组进行子分组,您可以简单地使用current-group()函数。

你问:

我想知道是否无法在不声明特定变量的情况下以其他方式访问父项的当前分组键?

答案:不,不是。各种指令设置隐式“当前 X”(例如当前项、当前组、当前分组键、当前正则表达式组)的 XSLT 设计是一种深思熟虑的设计选择,它使简单的事情变得更简单,使复杂的事情变得更难。在这种情况下,获取外部for-each-group的当前分组键属于“复杂事物”类别,并且需要绑定一个变量。