<xsl:template match="/*"> 和 <xsl:template match="*"> 的区别

tes*_*ter 1 xslt match

你能解释一下这两者之间的区别吗

<xsl:template match="/*">
Run Code Online (Sandbox Code Playgroud)

和

<xsl:template match="*">
Run Code Online (Sandbox Code Playgroud)

和

<xsl:template match="/">
Run Code Online (Sandbox Code Playgroud)

看看比赛规则:)

非常感谢您的帮助!

har*_*rpo 5

第二条规则,

<xsl:template match="*">
Run Code Online (Sandbox Code Playgroud)

匹配任何地方的任何元素,并将上下文节点设置为该元素。

其他的(1 和 3)差异很小。要了解差异,您必须了解“文档根”节点的概念。正如这个答案所说,

所述根节点是作为XML文档中的所有其他节点的祖先节点。它不是一个元素。... 令人困惑的是,最外面的元素有时被称为“根元素”。

考虑到这一点

<xsl:template match="/*">
Run Code Online (Sandbox Code Playgroud)

仅匹配文档中的“最外层元素”,并将上下文设置为该元素,而

<xsl:template match="/">
Run Code Online (Sandbox Code Playgroud)

仅匹配“文档根”本身,并将其设置为上下文。该规则将始终匹配,即使是空文档,而/*只会匹配实际具有元素的文档。

所以如果你有一个文件

<A />
Run Code Online (Sandbox Code Playgroud)

第一个规则(匹配/*)将匹配,上下文节点将是A。

第三个规则(匹配/)也将匹配,但A将是上下文节点的子节点。