положение элемента должно быть в порядке возрастания - PullRequest
0 голосов
/ 12 апреля 2019

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

0 голосов
/ 12 апреля 2019

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')]">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...