Как итерировать для печати NOS данной длины в XSLT? - PullRequest
1 голос
/ 30 марта 2012

Я работаю над xslt 1.0 Мне нужно напечатать номера от 1 до заданной длины.

Например, если заданная длина равна 5, то мне нужно повторить цикл, который может повторяться 5 раз, и печатать номера как1,2,3,4,5 это.Я попытался использовать цикл for, но я не могу уменьшить значение для печати в каждом итераторе.

Пожалуйста, какие-либо предложения по приведенному выше сценарию?Спасибо inadvanvce

1 Ответ

1 голос
/ 30 марта 2012

Это преобразование :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/">
     <xsl:call-template name="printNumbers">
      <xsl:with-param name="pUpTo" select="5"/>
     </xsl:call-template>
 </xsl:template>

 <xsl:template name="printNumbers">
      <xsl:param name="pUpTo"/>
      <xsl:param name="pCurrent" select="1"/>

      <xsl:if test="$pUpTo >= $pCurrent">
        <xsl:value-of select="$pCurrent"/>
        <xsl:text> </xsl:text>

        <xsl:call-template name="printNumbers">
          <xsl:with-param name="pUpTo" select="$pUpTo"/>
          <xsl:with-param name="pCurrent" select="$pCurrent+1"/>
        </xsl:call-template>
      </xsl:if>
 </xsl:template>
</xsl:stylesheet>

при применении к любому документу XML (не используется), дает требуемый, правильный результат :

1 2 3 4 5 

Для успешного создания огромного количества предметов используйте рекурсию в стиле DVC, как в моем ответе на этот вопрос:

Печать чисел от одного до миллиона

Я рекомендую использовать функции библиотеки FXSL , чтобы не тратить слишком много времени на написание явной рекурсии и избежать возможных ошибок при этом.

...