Re: [xsl] Count the node from zero instead of one.

Subject: Re: [xsl] Count the node from zero instead of one.
From: Mukul Gandhi <gandhi.mukul@xxxxxxxxx>
Date: Fri, 26 Nov 2010 14:48:10 +0530
In XSLT 2.0 you may try to do something like below,

<xs:function name="func:myNumber" as="xs:positiveInteger">
      <xsl:param name="nodePattern" as="node()*" />

      <xsl:variable name="num" as="xs:positiveInteger">
           <xsl:number count="$nodePattern"/>
      </xsl:variable>
      <xsl:sequence select="$num - 1" />
</xs:function>

and replace following in your code:

<xsl:element name="position">
     <xsl:number count="*"/>
     <xsl:text>,</xsl:text>
</xsl:element>

with

<position>
     <xsl:value-of select="func:myNumber(*)" />
     <xsl:text>,</xsl:text>
</position>

you would have to bind the function namespace prefix "func:" to an
appropriate URI.

This is not tested.

On Fri, Nov 26, 2010 at 12:38 PM, Rashi Bhardwaj
<rashi.bhardwaj@xxxxxxxxx> wrote:
> HI All,
>
> I m counting the node position from this logic in the below sample xml
>
> xml:
>
> <test>
> <a>
> <b name ='1'></b>
> <b name ='2'></b>
> <b name ='3'>
> <c>aaa</c>
> </b>
> <b name ='4'>
> B  B  B  B <c>bbb</c>
> B  B  B  B <c>ccc</c>
> </b>
> <b name ='4'>
> B  B  B  B <c>dddd</c>
> B  B  B  B <c>eeee</c>
> </b>
> </a>
> <a>
> <b name ='1'></b>
> <b name ='2'>
> <c>fffff</c>
> </b>
> <b name ='3'></b>
> <b name ='4'>
> B  B  B  B <c>gggg</c>
> </b>
> </a>
> </test>
>
> <xsl:template name="CountNode">
> B  B  B  B  B  B  B  B <xsl:param name="node"
> select="//b[c[preceding-sibling::c]][not(@name
> =preceding::b[child::c]/@name)]/@name"/>
> B  B  B  B  B  B  B  B <xsl:for-each select="$node">
> B  B  B  B  B  B  B  B  B  B  B  B <xsl:element name="position">
> B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B <xsl:number count="*"/>
> B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B <xsl:text>,</xsl:text>
> B  B  B  B  B  B  B  B  B  B  B  B </xsl:element>
> B  B  B  B  B  B  B  B  B  B  B  B <xsl:if test="position()!=last()"/>
> B  B  B  B  B  B  B  B </xsl:for-each>
> B  B  B  B </xsl:template>
>
> it gives the result 3,4,2,....I want it should count from zero instead
> of one and the result shld be 2,3,1.or it can print the result by
> subracing 1 from it like 3-1=2.
>
> Please suggest some thing...
>
> Thanks....
> Rashi




--
Regards,
Mukul Gandhi

Current Thread