Subject: [xsl] using parameters to identify element levels From: fiberartisan@xxxxxxxxx Date: Mon, 4 Dec 2006 10:41:49 -0500 |
given the following source: <item ItemID="1" ParentID="0">item1</item> <item ItemID="2" ParentID="0">item2</item> <item ItemID="3" ParentID="2">Item3</item> <item ItemID="4" ParentID="3">Item4</item> <item ItemID="5" ParentID="2">item5</item> <item ItemID="6" ParentID="0">item6</item>
I'd like the following output: <itemL1 ItemID="1" ParentID="0">item1</itemL1> <itemL1 ItemID="2" ParentID="0">item2</itemL1> <itemL2 ItemID="3" ParentID="2">Item3</itemL2> <itemL3 ItemID="4" ParentID="3">Item4</itemL3> <itemL2 ItemID="5" ParentID="2">item5</itemL2> <itemL1 ItemID="6" ParentID="0">item6</itemL1>
<xsl:template match="item"> <!-- set initial parameter values --> <xsl:param name="ItemIDL0">0</xsl:param> <xsl:param name="ItemIDL1">9999</xsl:param> <xsl:param name="ItemIDL2">9999</xsl:param> <xsl:param name="ItemIDL3">9999</xsl:param> <xsl:param name="ItemIDL4">9999</xsl:param> <xsl:choose> <!-- match L1 --> <xsl:when test="@ParentID = $ItemIDL0"> <xsl:call-template name="ItemL1"/> </xsl:when> <!-- match L2 --> <xsl:when test="@ParentID = $ItemIDL1"> <xsl:call-template name="ItemL2"/> </xsl:when> <!-- match L3 --> <xsl:when test="@ParentID = $ItemIDL2"> <xsl:call-template name="ItemL3"/> </xsl:when> <!-- match L4 --> <xsl:when test="@ParentID = $ItemIDL3"> <xsl:call-template name="ItemL4"/> </xsl:when> <xsl:otherwise> <xsl:element name="Otherwise"> <xsl:apply-templates/> </xsl:element> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template name="ItemL1"> <xsl:param name="ItemIDL1" select="@ItemID"/> <xsl:element name="ItemL1"> <xsl:apply-templates/> </xsl:element> </xsl:template>
<xsl:template name="ItemL2"> <xsl:param name="ItemIDL2" select="@ItemID"/> <xsl:element name="ItemL2"> <xsl:apply-templates/> </xsl:element> </xsl:template>
<xsl:template name="ItemL3"> <xsl:param name="ItemIDL3" select="@ItemID"/> <xsl:element name="ItemL3"> <xsl:apply-templates/> </xsl:element> </xsl:template>
<xsl:template name="ItemL4"> <xsl:param name="ItemIDL4" select="@ItemID"/> <xsl:element name="ItemL4"> <xsl:apply-templates/> </xsl:element> </xsl:template>
And my result is: <ItemL1>item1</ItemL1> <ItemL1>item2</ItemL1> <Otherwise>Item3</Otherwise> <Otherwise>Item4</Otherwise> <Otherwise>item5</Otherwise> <ItemL1>item6</ItemL1>
So it appears that the re-setting of the parameter values isn't working ... suggestions?
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] XSLT 2.0 and lazy evaluat, Michael Kay | Thread | Re: [xsl] using parameters to ident, David Carlisle |
Re: [xsl] How do I line up fo:block, G. Ken Holman | Date | [xsl] Searching in Sub-children fro, Houman Khorasani |
Month |