XSLT:使用带有结果树片段的键?

XSLT: Using a key with a result tree fragment?

从我的 , the p elements I want to apply the 到实际上在结果树片段中。

如何实现按键功能:

 <xsl:key name="kRByLevelAndParent" match="p"
  use="generate-id(preceding-sibling::p
                            [not(@ilvl >= current()/@ilvl)][1])"/>

匹配结果树片段中的 p 个元素?

在该答案中,密钥是通过应用模板使用的:

 <xsl:template match="/*">
  <list>
    <item>
      <xsl:apply-templates select="key('kRByLevelAndParent', '')[1]" mode="start">
        <xsl:with-param name="pParentLevel" select="$pStartLevel"/>
        <xsl:with-param name="pSiblings" select="key('kRByLevelAndParent', '')"/>
      </xsl:apply-templates>
    </item>
  </list>
 </xsl:template>

我想将我的结果树片段作为参数传递,并让键匹配其中的 p 个元素。

这是正确的思考方式吗?

XSLT 2.0 及更高版本中没有结果树片段,只有临时树。至于键,它们适用于每个文档, key 函数只有第三个参数传递给根节点或子树进行搜索,所以假设你有临时树 $var 你可以使用 key('keyname', key-value-expression, $var)$var.

中查找元素