положение элемента должно быть в порядке возрастания

#xslt

#xslt

Вопрос:

Я хочу, чтобы мой 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
  

Ответ №1:

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>amp;#10;</xsl:text>
</xsl:for-each>
  

Или вы могли бы упростить xsl:for-each это….

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