Re: [xsl] compact code using loop

Subject: Re: [xsl] compact code using loop
From: "Andrew Welch" <andrew.j.welch@xxxxxxxxx>
Date: Wed, 19 Mar 2008 09:01:46 +0000
On 19/03/2008, Mansour <mansour77@xxxxxxxxx> wrote:
> I have repetitive code in my xslt. This code produces a list and does
>  not depend on the input xml. I am wondering if there is a way to
>  minimize this code. I can do it through for-each, but the element are in
>  the xslt file and not in the input xml, so I can not use the 'select='.
>  For example, I need to generate this code regardless of the input xml:
>
>  <item>
>     <type>type1</type>
>     <value>val1</value>
>  </item>
>  <item>
>     <type>type2</type>
>     <value>val2</value>
>  </item>
>  <item>
>     <type>type3</type>
>     <value>val3</value>
>  </item>
>
>
>  Of course I can use this directly in my xsl file, but there's more item.
>  So the code is too long. And there are more tags for the item.

If 2.0 you can do:

<xsl:for-each select="1 to 3">
  <item>
    <type>type<xsl:value-of select="."/>
     ...


In 1.0 you really need a recursive template:

<xsl:call-template name="generate">
  <xsl:with-param name="count" select="3"/>
</

<xsl:template name="generate">
  <xsl:param name="count"/>
  <xsl:if test="$count > 0">
    <item>
      <type>type<xsl:value-of select="$count"/>
      </
    </
    <xsl:call-template name="generate">
      <xsl:with-param name="count" select="$count - 1"/>
    </
  </xsl:if>
</xsl:template>


cheers
-- 
Andrew Welch
http://andrewjwelch.com
Kernow: http://kernowforsaxon.sf.net/

Current Thread