1

我在我的一个 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]" />

谢谢

4

3 回答 3

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]

于 2013-08-26T15:28:34.317 回答
1

它只是表示集合中的第一个节点。所以第一个ul包含第一个元素,中间ul包含除第一个和最后一个之外的所有节点,最后一个ul包含最后一个节点。

于 2013-08-26T13:22:09.557 回答
1

select表达式是一个 XPATH 表达式,它表示:

  • 从根或其他任何东西开始 ( //)
  • 查找标签名称VideoNode
  • 但只有那些属性Vidoe值为Yes
  • 返回第一个这样的节点[1]

现在,该[1]部分选择父节点的第一个匹配节点,因此如果您的节点有多个父VideoNode节点,那么结果应该是多个这样的节点......

例如:

<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]本地的,而不是全局的。

于 2013-08-26T13:23:03.060 回答