Re: [xsl] Increment a variable

Subject: Re: [xsl] Increment a variable
From: Mukul Gandhi <gandhi.mukul@xxxxxxxxx>
Date: Thu, 18 Aug 2005 20:01:18 +0530
Hi Chandu,
  The following XSLT 2.0 stylesheet might be helpful (though it
does'nt generate numbers for gridx and gridy properly). I have tested
this with Saxon 8.4.

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
version="2.0">

<xsl:output method="xml" indent="yes" />

<xsl:template match="/Parameters">
   <Parameters xmlns:fo="http://www.w3.org/1999/XSL/Format";>
     <xsl:for-each select="parameter">
       <xsl:call-template name="generateElem">
         <xsl:with-param name="node" select="." />
         <xsl:with-param name="x" select="position()-1" />
       </xsl:call-template>
     </xsl:for-each>
   </Parameters>
</xsl:template>

<xsl:template name="generateElem">
   <xsl:param name="node" />
   <xsl:param name="x" />

   <xsl:element name="{name($node)}">
     <xsl:attribute name="gridx" select="$x" />
     <xsl:attribute name="gridy" select="$x + 1" />
     <xsl:value-of select="$node" />
   </xsl:element>
</xsl:template>

</xsl:stylesheet>

Regards,
Mukul


On 8/18/05, ChandraShekar, A <ChandraShekar.A@xxxxxxxxxxx> wrote:
> Hello xsl-list,
>
>        I can't figure out what is the problem in my code. Please can
> any body help me.
>
> Source:
>
>        <?xml version="1.0" encoding="UTF-8"?>
>        <Parameters>
>                <parameter>
>                        <name>Param1
>                        </name>
>                </parameter>
>                <parameter>
>                        <name>Param2
>                        </name>
>                </parameter>
>                <parameter>
>                        <name>Param3
>                        </name>
>                </parameter>
>                <parameter>
>                        <name>Param4
>                        </name>
>                </parameter>
>                <parameter>
>                        <name>Param5
>                        </name>
>                </parameter>
>        </Parameters>
>
> Xslt code:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
> xmlns:fo="http://www.w3.org/1999/XSL/Format";>
> <xsl:output method="xml"></xsl:output>
>        <xsl:template match="/">
>                <xsl:apply-templates select="Parameters">
>                </xsl:apply-templates>
>        </xsl:template>
>        <xsl:template match="Parameters">
>                <parameters>
>                        <xsl:apply-templates select="parameter">
>                                <xsl:with-param name="x" select="0"/>
>
>                                <xsl:with-param name="y" select="0"/>
>                                <xsl:with-param name="start"
> select="0"/>
>                                <xsl:with-param name="count"
> select="count(parameter)"/>
>                        </xsl:apply-templates>
>                </parameters>
>        </xsl:template>
>        <xsl:template match="parameter">
>                <xsl:param name="x" select="0"/>
>                <xsl:param name="y" select="0"/>
>                <xsl:param name="start" select="0"/>
>                <xsl:param name="count" select="0"/>
>                <parameter gridx="{$x}" gridy="{$y}">
>                        <xsl:value-of select=".">
>                        </xsl:value-of>
>                </parameter>
>                <xsl:if test="$start &lt; $count">
>                        <xsl:variable name="temp1" select="$x"/>
>                        <xsl:variable name="temp2" select="$y+1"/>
>                        <xsl:variable name="tempy" select="$temp2 mod
> 2"/>
>                        <xsl:message>
>                                <xsl:value-of select="$tempy"/>
>                        </xsl:message>
>                        <xsl:choose>
>                                <xsl:when test="$tempy=0">
>                                        <xsl:variable name="tempx"
> select="$temp1+1"/>
>                                                <xsl:apply-templates
> select=".">
>                                                        <xsl:with-param
> name="x" select="$tempx"/>
>                                                        <xsl:with-param
> name="y" select="$tempy"/>
>                                                        <xsl:with-param
> name="start" select="$start+1"/>
>                                                        <xsl:with-param
> name="count" select="$count"/>
>                                                </xsl:apply-templates>
>                                </xsl:when>
>
>                                <xsl:otherwise>
>                                        <xsl:variable name="tempx"
> select="$temp1"/>
>                                                <xsl:apply-templates
> select=".">
>                                                        <xsl:with-param
> name="x" select="$tempx"/>
>                                                        <xsl:with-param
> name="y" select="$tempy"/>
>                                                        <xsl:with-param
> name="start" select="$start+1"/>
>                                                        <xsl:with-param
> name="count" select="$count"/>
>                                                </xsl:apply-templates>
>                                </xsl:otherwise>
>                        </xsl:choose>
>                </xsl:if>
>        </xsl:template>
> </xsl:stylesheet>
>
> Destination expected:
>
>  <?xml version="1.0" encoding="UTF-16" ?>
> - <parameters xmlns:fo="http://www.w3.org/1999/XSL/Format";>
>  <parameter gridx="0" gridy="0">Param1</parameter>
>  <parameter gridx="0" gridy="1">Param2</parameter>
>  <parameter gridx="1" gridy="0">Param3</parameter>
>  <parameter gridx="1" gridy="1">Param4</parameter>
>  <parameter gridx="2" gridy="0">Param5</parameter>
>  </parameters>
>
> But the result is :
>
>  <?xml version="1.0" encoding="UTF-16" ?>
> - <parameters xmlns:fo="http://www.w3.org/1999/XSL/Format";>
>  <parameter gridx="0" gridy="0">Param1</parameter>
>  <parameter gridx="0" gridy="1">Param1</parameter>
>  <parameter gridx="1" gridy="0">Param1</parameter>
>  <parameter gridx="1" gridy="1">Param1</parameter>
>  <parameter gridx="2" gridy="0">Param1</parameter>
>  <parameter gridx="2" gridy="1">Param1</parameter>
>  <parameter gridx="0" gridy="0">Param2</parameter>
>  <parameter gridx="0" gridy="1">Param2</parameter>
>  <parameter gridx="1" gridy="0">Param2</parameter>
>  <parameter gridx="1" gridy="1">Param2</parameter>
>  <parameter gridx="2" gridy="0">Param2</parameter>
>  <parameter gridx="2" gridy="1">Param2</parameter>
>  <parameter gridx="0" gridy="0">Param3</parameter>
>  <parameter gridx="0" gridy="1">Param3</parameter>
>  <parameter gridx="1" gridy="0">Param3</parameter>
>  <parameter gridx="1" gridy="1">Param3</parameter>
>  <parameter gridx="2" gridy="0">Param3</parameter>
>  <parameter gridx="2" gridy="1">Param3</parameter>
>  <parameter gridx="0" gridy="0">Param4</parameter>
>  <parameter gridx="0" gridy="1">Param4</parameter>
>  <parameter gridx="1" gridy="0">Param4</parameter>
>  <parameter gridx="1" gridy="1">Param4</parameter>
>  <parameter gridx="2" gridy="0">Param4</parameter>
>  <parameter gridx="2" gridy="1">Param4</parameter>
>  <parameter gridx="0" gridy="0">Param5</parameter>
>  <parameter gridx="0" gridy="1">Param5</parameter>
>  <parameter gridx="1" gridy="0">Param5</parameter>
>  <parameter gridx="1" gridy="1">Param5</parameter>
>  <parameter gridx="2" gridy="0">Param5</parameter>
>  <parameter gridx="2" gridy="1">Param5</parameter>
>  </parameters>
>
> Thanks in advance,
> Chandu

Current Thread