xslt中两个正斜杠的目的是什么?"//"

jro*_*sav 5 xml xslt

我在XML类中,并具有以下代码行.

<xsl:value-of select="count(//@qty)" />
Run Code Online (Sandbox Code Playgroud)

在qty属性之前"//"的目的是什么?它指的是什么?

wst*_*wst 2

这里,//相当于descendant::,因此它将返回作为上下文节点后代的所有 @qty 值。即:在这种情况下没有给出上下文,因此它应该返回文档的所有值。

如果你有.//,上下文将是当前节点,并且输出将是该节点的所有后代,而不是文档。

更新正如大卫正确指出的那样,这两个表达式并不严格等效,只是在功能上等效于您的问题。他注意到下面的微妙之处。然而,我想你会发现,虽然从技术上讲//确实等同于descendant-or-self::node()

//x == //descendant-or-self::node()/x
Run Code Online (Sandbox Code Playgroud)

descendant::使用时期待是有意义的,//因为:

<x/>//* => ()
<x/>/descendant-or-self::* => <x/>
Run Code Online (Sandbox Code Playgroud)

你不能简单地使用//而不选择一些东西。所以不存在//可以真正给你这个-or-self角色的情况。

/a/b// => {error}
Run Code Online (Sandbox Code Playgroud)