我想在没有for-each的情况下重写以下内容:
<xsl:for-each select="$nodeTree">
<xsl:if test="@value = $myVariable">
<xsl:value-of select="position()" /></xsl:if>
</xsl:for-each>
以上内容遍历树中的每个项目,如果匹配,则打印位置。它有效。
如何使用谓词而不是for-each?
在一行中重写它我的尝试是:
<xsl:value-of select="$nodeTree[@value = $myVariable][position()]" />
......但这不起作用。是否真的有必要使用for-each?
非常感谢! 附:我正在使用XSLT 1.0。
答案 0 :(得分:1)
尝试使用xsl:number
代替position()
。
由于您使用的是XSLT 1.0,您可能仍需要使用xsl:for-each
...
<xsl:for-each select="$nodeTree[@value=$myVariable]">
<xsl:number/>
</xsl:for-each>
如果您使用的是XSLT 2.0,则可以使用select
attribute on xsl:number
...
<xsl:number select="$nodeTree[@value=$myVariable]"/>
答案 1 :(得分:1)
如何使用谓词而不是a来重写一行 换每个?
如果您向我们展示了一个输入示例进行测试,而不是让我们猜测,我会更自在地回答这个问题。
无论如何,我想你可以使用:
<xsl:value-of select="count($nodeTree[@value=$myVariable]/preceding-sibling::*) + 1" />
如果您确信存在与您的变量匹配的节点(否则您将得到1的错误答案)。