我的XSLT中有一些类似下面的代码 -
<div>
<ul class="toplevel-Video group Video-coll-left">
<xsl:apply-templates select="//VideoNode[@Video='Yes'][1]" />
</ul>
<ul class="toplevel-Video group Video-coll">
<xsl:apply-templates select="//VideoNode[@Video='Yes'][position()>=2 and last()>position()]" />
</ul>
<ul class="toplevel-Video group Video-coll-right">
<xsl:apply-templates select="//VideoNode[@Video='Yes'][last()]" />
</ul>
</div>
并且无法理解下面代码中的[1]是什么意思
<xsl:apply-templates select="//VideoNode[@Video='Yes'][1]" />
谢谢
答案 0 :(得分:2)
//X[1]
和(//X)[1]
之间存在差异。第一个表达式选择每个X作为其父项的第一个X子项;第二个选择文档中的第一个X.实际上,“[]”运算符的优先级高于“//”运算符。更正式地,//X[1]
扩展为root()/(descendant-or-self::node())/(child::X[1])
,而(//X)[1]
扩展为(root()/descendant-or-self::node()/child::X)[1]
。
答案 1 :(得分:1)
它只是意味着集合中的第一个节点。因此,第一个ul
包含第一个元素,中间ul
包含除第一个和最后一个之外的所有节点,最后一个ul
包含最后一个节点。
答案 2 :(得分:1)
select
表达式是一个XPATH表达式,表示:
//
)VideoNode
Vidoe
且值为Yes
[1]
现在,[1]
部分选择父节点的第一个匹配节点,因此如果您的VideoNode
节点有多个父节点,那么结果应该是多个这样的节点......
e.g:
<root>
<parent1>
<VideoNode Video='Yes'/> <!-- this gets selected -->
<VideoNode Video='Yes'/>
<VideoNode Video='Yes'/>
<VideoNode Video='Yes'/>
<VideoNode Video='Yes'/>
</parent1>
<parent2>
<VideoNode Video='Yes'/> <!-- and so does this! -->
<VideoNode Video='Yes'/>
<VideoNode Video='Yes'/>
</parent2>
</root>
所以[1]
是本地,而非全球。