#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')]">