我有过
<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]">发布于 2011-06-20 08:09:08
这个问题归结为://article[1]是什么意思?答案是这意味着
/descendant-or-self::node()/child::article[1]它选择文档中每个节点的第一个“项目”子节点。这与(//article)[1]不同,后者选择文档中的第一篇文章。
所以你想表达的是
<xsl:for-each select="(//article[articletype/@id=15])[1]">发布于 2011-06-18 17:38:08
使用您列出的第一个XPath://article[articletype/@id=15 and position() =1],您将在必须具有articletype/@id=15的每个轴(按文档顺序)请求第一个article元素。
对于每个轴,如果第一个article元素没有带有@id=15的articletype元素,则没有匹配。
使用第二个XPath://article[articletype/@id=15],您将请求所有具有具有@id=15的articletype子元素的article元素。很明显,你的文件里有四个。
您应该使用以下XPath:
(//article[articletype/@id=15])[1]Dr. Michael Kay's answer更好地解释了其行为方式的原因。也请参阅this answer from Dimitri Novatchev
发布于 2011-06-18 11:24:57
我认为您需要以下xpath表达式:
<xsl:for-each select="//article[articletype/@id=15][1]">https://stackoverflow.com/questions/6395626
复制相似问题