Subject: Re: [xsl] Count preceeding sibling but in different element From: Mukul Gandhi <gandhi.mukul@xxxxxxxxx> Date: Fri, 5 Aug 2005 12:17:36 +0530 |
Please try this XSL.. <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" indent="yes" /> <xsl:template match="/element1"> <element1> <xsl:for-each select="*"> <xsl:copy> <xsl:call-template name="numberingTemplate"> <xsl:with-param name="node-set" select="*" /> </xsl:call-template> </xsl:copy> </xsl:for-each> </element1> </xsl:template> <xsl:template name="numberingTemplate"> <xsl:param name="node-set" /> <xsl:for-each select="$node-set"> <xsl:element name="{name()}"> <xsl:attribute name="number"><xsl:value-of select="count(self::* | preceding::step)" /></xsl:attribute> </xsl:element> </xsl:for-each> </xsl:template> </xsl:stylesheet> For e.g. when it is applied to XML - <element1> <element2> <step/> <step/> </element2> <element3> <step/> </element3> <element4> <step/> <step/> <step/> </element4> </element1> The output produced is - <?xml version="1.0" encoding="UTF-8"?> <element1> <element2> <step number="1"/> <step number="2"/> </element2> <element3> <step number="3"/> </element3> <element4> <step number="4"/> <step number="5"/> <step number="6"/> </element4> </element1> Regards, Mukul On 8/5/05, Taco Fleur <taco@xxxxxxxxxxxxx> wrote: > I am wanting to count all preceeding sibling (steps) but they could be > in different elements > > <element1> > <element2> > <step/> > <step/> > </element2> > <element3> > <step/> > </element3> > <element4> > <step/> > <step/> > <step/> > </element4> > </element1> > > The output I am after is > > <element1> > <element2> > <step number="1" /> > <step number="2"/> > </element2> > <element3> > <step number="3"/> > </element3> > <element4> > <step number="4"/> > <step number="5"/> > <step number="6"/> > </element4> > </element1> > > I have have the following which works fine on every step within an > element, i.e. > > <element3> > <step/> > </element3> > <element4> > <step/> > <step/> > <step/> > </element4> > > Would become > > <element3> > <step number="1"/> > </element3> > <element4> > <step number="1"/> > <step number="2"/> > <step number="3"/> > </element4> > > <xsl:template match="step"> > <xsl:copy> > <xsl:copy-of select="@*" /> > <!-- Calculate the step number --> > <xsl:attribute name="number"> > <xsl:value-of select="count( preceding-sibling::step ) + 1" /> > </xsl:attribute> > <xsl:apply-templates /> > </xsl:copy> > </xsl:template> > > Can anyone help? > Thanks > ________________________________ > Taco Fleur - E-commerce Development Manager > Shelco Searches & Services > An Authorised ASIC Information Broker > www.shelco.com.au <blocked::http://www.shelco.com.au> > Ph: + 61 7 3236 2605
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Count preceeding sibling but , Taco Fleur | Thread | RE: [xsl] Count preceeding sibling , Taco Fleur \(@DataBr |
[xsl] Count preceeding sibling but , Taco Fleur | Date | RE: [xsl] Count preceeding sibling , Michael Kay |
Month |