改变上下文节点的XSLT指令/函数列表?

14

有没有人知道一份能够改变上下文节点的XSLT指令/函数列表?

例如,像for-each这样的指令是其中之一。


“<xsl:for-each”就是这样,但已足够。我想改变上下文而不必编写新模板。我发现对于单一选择,进行“for-each”操作正是我需要的。 - TWiStErRob
2个回答

16

明显改变上下文的XSLT 2.0指令包括for-eachapply-templatesfor-each-groupanalyze-string。但是还有一些其他指令,例如xsl:sortxsl:key

在XPath中,操作符/[]可以改变上下文,但没有能够更改上下文的函数。


嘿酷 =D 顺便问一下,改变当前节点的唯一方法是使用for-each吗? - Pacerier
1
XSLT 3.0 更新:现在还有 xsl:iteratexsl:source-documentxsl:merge - Michael Kay

3

XSLT 1.0 中只有两个东西会改变上下文,而且它们都不是函数。这两个东西分别是:

<xsl:apply-templates select='some-test'/>

这将导致选定的节点被处理,每个节点在处理时都成为上下文节点。

以及

<xsl:for-each select='some-test'/>

在XSLT 2.0中,您还可以使用
<xsl:for-each-group/>

(这比xsl:apply-templatesxsl:for-each稍微复杂地设置上下文节点)

1
apply-templates 不会在当前模板中更改上下文节点,它会跳转到另一个模板。据我所知,xsl:for-each 是唯一可以更改模板内 . 意义的指令。 - Flynn1179
2
严格来说,是的。xsl:apply-templates本身不会改变上下文。它选择要处理的节点。处理模板本身设置当前节点。但是,它确实会导致上下文发生变化,这就是我想表达的重点 :) - Nic Gibson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接