我有
<xsl:for-each select="//article[articletype/@id=15 and position() =1]">
什么都没有拉回来。然后我将其改为
<xsl:for-each select="//article[articletype/@id=15]">
<p><xsl:value-of select="position()"/></p>
拉回来
1 2 3 4
出现这种情况的原因是什么?我甚至试过number(position())
。它只适用于我使用大数而不是我期望的位置
<xsl:for-each select="//article[articletype/@id=15 and position() < 100]">
答案 0 :(得分:5)
这个问题简化为://article[1]
是什么意思?答案是它意味着
/descendant-or-self::node()/child::article[1]
选择文档中每个节点的第一个“article”子节点。这与(//article)[1]
不同,<xsl:for-each select="(//article[articletype/@id=15])[1]">
选择文档中的第一篇文章。
所以你想要的表达是
{{1}}
答案 1 :(得分:0)
使用您列出的第一个XPath://article[articletype/@id=15 and position() =1]
,您要求每个轴(按文档顺序)中的第一个article
元素必须具有articletype/@id=15
。
对于每个轴,如果第一个article
元素没有带articletype
的{{1}}元素,则没有任何内容匹配。
使用第二个XPath:@id=15
,您要求所有//article[articletype/@id=15]
元素具有article
子元素articletype
。显然,你的文档中有4个。
您应该使用以下XPath:
@id=15
Dr. Michael Kay's answer更好地解释了为什么它会这样做。另请参阅this answer from Dimitri Novatchev
答案 2 :(得分:-1)
我认为您需要以下xpath表达式:
<xsl:for-each select="//article[articletype/@id=15][1]">