我在XML类中,并具有以下代码行.
<xsl:value-of select="count(//@qty)" />
Run Code Online (Sandbox Code Playgroud)
在qty属性之前"//"的目的是什么?它指的是什么?
这里,//相当于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)