xsl-list
[Top] [All Lists]

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

2010-11-27 09:07:03
Hello Mukul,

I am sorry mention in my query that I can use xslt 1.0. Sincere
apologies for the same. Is it possible to perform the same function
with xslt 1.0?

Please let me know....Cant we take the value in a variable instead of
element ''position''?

Thanks,
Rashi
Date: Fri, 26 Nov 2010 14:48:10 +0530
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
From: Mukul Gandhi <gandhi(_dot_)mukul(_at_)gmail(_dot_)com>
Subject: Re: [xsl] Count the node from zero instead of one.
Message-ID: 
<AANLkTinxEzwQXzb7PgOBGoy+LSEKyScE1WJUwpKqRAVX(_at_)mail(_dot_)gmail(_dot_)com>

In XSLT 2.0 you may try to do something like below,

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

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

and replace following in your code:

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

with

<position>
    <xsl:value-of select=3D"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(_dot_)bhardwaj(_at_)gmail(_dot_)com> wrote:
HI All,

I m counting the node position from this logic in the below sample xml

xml:

<test>
<a>
<b name =3D'1'></b>
<b name =3D'2'></b>
<b name =3D'3'>
<c>aaa</c>
</b>
<b name =3D'4'>
=C2=A0 =C2=A0 =C2=A0 =C2=A0<c>bbb</c>
=C2=A0 =C2=A0 =C2=A0 =C2=A0<c>ccc</c>
</b>
<b name =3D'4'>
=C2=A0 =C2=A0 =C2=A0 =C2=A0<c>dddd</c>
=C2=A0 =C2=A0 =C2=A0 =C2=A0<c>eeee</c>
</b>
</a>
<a>
<b name =3D'1'></b>
<b name =3D'2'>
<c>fffff</c>
</b>
<b name =3D'3'></b>
<b name =3D'4'>
=C2=A0 =C2=A0 =C2=A0 =C2=A0<c>gggg</c>
</b>
</a>
</test>

<xsl:template name=3D"CountNode">
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<xsl:param name=3D=
"node"
select=3D"//b[c[preceding-sibling::c]][not(@name
=3Dpreceding::b[child::c]/@name)]/@name"/>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<xsl:for-each sele=
ct=3D"$node">
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0<xsl:element name=3D"position">
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<xsl:number count=3D"*"/>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<xsl:text>,</xsl:text>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0</xsl:element>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0<xsl:if test=3D"position()!=3Dlast()"/>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</xsl:for-each>
=C2=A0 =C2=A0 =C2=A0 =C2=A0</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=3D2.

Please suggest some thing...

Thanks....
Rashi

--=20
Regards,
Mukul Gandhi



-- 


Rashi Bhardwaj

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>