XSL:获取匹配节点的位置

时间:2015-04-06 17:27:21

标签: xml xslt

我想在没有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。

2 个答案:

答案 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的错误答案)。