XSLT和position()

pee*_*pee 2 xml xslt xslt-2.0

我有

<xsl:for-each select="//article[articletype/@id=15 and position() =1]">
Run Code Online (Sandbox Code Playgroud)

什么都没有拉回来.然后我把它改成了

<xsl:for-each select="//article[articletype/@id=15]">
<p><xsl:value-of select="position()"/></p>
Run Code Online (Sandbox Code Playgroud)

它拉回来了

1 2 3 4

出现这种情况的原因是什么?我甚至试过了number(position()).它只有在我使用大数而不是我期望的位置时才有效

<xsl:for-each select="//article[articletype/@id=15 and position() &lt; 100]">
Run Code Online (Sandbox Code Playgroud)

Mic*_*Kay 5

这个问题简化为:什么//article[1]意思?答案是,这意味着

/descendant-or-self::node()/child::article[1]
Run Code Online (Sandbox Code Playgroud)

它选择文档中每个节点的第一个"文章"子项.这与(//article)[1]选择文档中的第一篇文章不同.

所以你想要的表达方式是

<xsl:for-each select="(//article[articletype/@id=15])[1]">
Run Code Online (Sandbox Code Playgroud)