首页 > 解决方案 > 元素的位置必须按递增顺序

问题描述

我希望我的 XSLT 以递增的顺序找到元素的位置,例如 1、2、3、4、5 等,但我的 xslt 生成位置为 1、2、4、5、8。

XML

<tags>
   <tag>
     <display>Yes</display>
     <data>position<data>
   </tag>
   <tag>
     <display>Yes</display>
     <data>position<data>
   </tag>
   <tag>
     <display>No</display>
     <data>position<data>
   </tag>
   <tag>
     <display>No</display>
     <data>position<data>
   </tag>
   <tag>
     <display>Yes</display>
     <data>position<data>
   </tag>
</tags>

XSLT

  <xsl:for-each select="tags/tag">
    <xsl:if test="display[contains(text(),'Yes')]">
      <xsl:value-of select="data"/> - <xsl:value-of select="position()"/>
    </xsl:if>
  </xsl:for-each>

预期输出:

我希望我的位置显示如下:

position - 1
position - 2
position - 3

实际输出:

position - 1
position - 2
position - 5

标签: xslt

解决方案


position()将基于您最初在 中选择的标签xsl:for-each,并且您将选择所有 5 个标签作为开始。

相反,将您的 if 条件作为条件添加xsl:for-each,因此您只选择您需要的 3,因此位置将根据需要为 1、2、3

<xsl:for-each select="tags/tag[display[contains(text(),'Yes')]]">
  <xsl:value-of select="data"/> - <xsl:value-of select="position()"/>
  <xsl:text>&#10;</xsl:text>
</xsl:for-each>

或者,您可以将其简化xsl:for-each为......

<xsl:for-each select="tags/tag[contains(display,'Yes')]">

推荐阅读