首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >XSLT和position()

XSLT和position()
EN

Stack Overflow用户
提问于 2011-06-18 11:22:39
回答 3查看 603关注 0票数 2

我有过

代码语言:javascript
运行
复制
<xsl:for-each select="//article[articletype/@id=15 and position() =1]">

这没什么回事。然后我把它改成

代码语言:javascript
运行
复制
<xsl:for-each select="//article[articletype/@id=15]">
<p><xsl:value-of select="position()"/></p>

把它拉回来

1 2 3 4

为什么会发生这种事?我甚至试过number(position())。只有当我使用一个大的数字而不是我所期望的位置时,它才能起作用。

代码语言:javascript
运行
复制
<xsl:for-each select="//article[articletype/@id=15 and position() &lt; 100]">
EN

回答 3

Stack Overflow用户

发布于 2011-06-20 08:09:08

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

代码语言:javascript
运行
复制
/descendant-or-self::node()/child::article[1]

它选择文档中每个节点的第一个“项目”子节点。这与(//article)[1]不同,后者选择文档中的第一篇文章。

所以你想表达的是

代码语言:javascript
运行
复制
<xsl:for-each select="(//article[articletype/@id=15])[1]">
票数 5
EN

Stack Overflow用户

发布于 2011-06-18 17:38:08

使用您列出的第一个XPath://article[articletype/@id=15 and position() =1],您将在必须具有articletype/@id=15的每个轴(按文档顺序)请求第一个article元素。

对于每个轴,如果第一个article元素没有带有@id=15articletype元素,则没有匹配。

使用第二个XPath://article[articletype/@id=15],您将请求所有具有具有@id=15articletype子元素的article元素。很明显,你的文件里有四个。

您应该使用以下XPath:

代码语言:javascript
运行
复制
(//article[articletype/@id=15])[1]

Dr. Michael Kay's answer更好地解释了其行为方式的原因。也请参阅this answer from Dimitri Novatchev

票数 0
EN

Stack Overflow用户

发布于 2011-06-18 11:24:57

我认为您需要以下xpath表达式:

代码语言:javascript
运行
复制
<xsl:for-each select="//article[articletype/@id=15][1]">
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6395626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档