2010-07-27 62 views
6

什么是XSLT中的//? (例如$currentPage//nodeXSLT中的//是什么?

+0

好问题(+1)。查看我的答案以获得完整详细的解释。 – 2010-07-27 13:03:36

回答

8

什么/ /在xslt?例如 ($当前页//节点)

在XPath缩写:

// is short for /descendant-or-self::node()/

的XSLT指令一些属性(如属性select)的值必须是一个XPath表达式。

因此,

($currentPage//node) 

代表

($currentPage/descendant-or-self::node()/node) 

这将选择名为node是,它们或者包含在包含在节点的可变$currentPage或是后代节点的所有子元素变量$currentPage

待办事项,在所提供的表达node()节点测试(它选择在descendant-or-self::轴上的所有节点类型,如元素,文本节点,注释和处理指令。

在另一边,somePath/nodesomePath/child::node的简写,只选择属于上下文节点的孩子命名为node元素。

我强烈建议不要使用名称node为元素,以避免这个混乱。

+0

@Dimitre - 我正在挑剔什么是一个很好的答案,但倒数第二段是不正确的。它们不会是上下文节点的子节点,它们将成为由'somePath'选择的节点的子节点。 – Alohci 2010-07-28 00:12:17

+1

@Alohci:是,并且任何时刻的“上下文节点”都是节点,下一个位置步骤从该节点开始执行 - 这意味着'child :: node'由'somePath/child :: node'确定,上下文节点是由'somePath'选择的任何节点。所以,你和我都说同样的东西:) – 2010-07-28 01:32:43

+0

'node()/ node'令人困惑。'node()'是一个预定义的函数,'node'是一个占位符变量? 'node()/ foo'不会让人困惑。 – Joren 2011-03-30 17:15:59

4

这看起来像它的XPath,它可以内XSLT被用来搜索该树匹配的路径给定的节点的一部分。这与CSS选择器类似。

双斜杠在任何深度都会进行子代搜索。

例如:

elementa//elementb 

将匹配任何elementb元件,其是一个elementa元件的后代,即使在它们之间有其它水平,例如:

<elementa> 
    <someelement> 
    <elementb> 
    </elementb> 
    </someelement> 
</elementa>