Subject: Re: Change the value of global variables/params ?? From: Paul Levin <plevin@xxxxxxx> Date: Wed, 08 Dec 1999 09:55:32 -0500 |
David, Please consider the following XML and XSL. Note that I have no control over the XML. That is, it is what it is, I can not have the structure of the XML changed. Note also that the following XML and XSL has been "cut-down" to only show those parts that are relevant to our discussion. Also the tag names have been changed to protect our information. You will see in the XSL below, that I use a "changable" variable to allow grouping. Can you tell me another way to produce the same output without a "changable" variable ? Paul ----------------------------- Sample XML ---------------------- <?xml version="1.0"?> <TOP> <LEVEL1> <LEVEL2> <GROUP> <ITEM> <NAME>Name1</NAME> <INFO> <INFOTYPE> <ID1>001</ID1> <ID2>001</ID2> <ITEMTYPE>TYPE1</ITEMTYPE> </INFOTYPE> </INFO> </ITEM> <ITEM> <NAME>Name2</NAME> <INFO> <INFOTYPE> <ID1>002</ID1> <ID2>002</ID2> <ITEMTYPE>TYPE1</ITEMTYPE> </INFOTYPE> </INFO> </ITEM> <ITEM> <NAME>Name3</NAME> <INFO> <INFOTYPE> <ID1>003</ID1> <ID2>003</ID2> <ITEMTYPE>TYPE2</ITEMTYPE> </INFOTYPE> </INFO> </ITEM> <ITEM> <NAME>Name4</NAME> <INFO> <INFOTYPE> <ID1>004</ID1> <ID2>004</ID2> <ITEMTYPE>TYPE2</ITEMTYPE> </INFOTYPE> </INFO> </ITEM> </GROUP> </LEVEL2> </LEVEL1> </TOP> ----------------------------- Sample XSL ---------------------- <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0"> <!-- For the above XML, generate the following HTML <HTML> <BODY> <H1>TYPE1</H1> <P>Name1</P> <P>Name2</P> <H1>TYPE2</H1> <P>Name3</P> <P>Name4</P> </BODY> </HTML> --> <xsl:output method="html"/> <xsl:template match="/"> <HTML> <BODY> <!-- initialize our changing variable --> <xsl:variable name="last_type" select="'none'" /> <!-- initialize variable --> <!-- for each item --> <xsl:for-each select="//ITEM"> <!-- sort the list of items first by type, and then by name --> <xsl:sort select=".//ITEMTYPE" data-type="text" order="ascending"/> <xsl:sort select=".//NAME" data-type="text" order="ascending"/> <!-- if this item's type is different than the previous item's type <xsl:if test="$last_type != .//ITEMTYPE"> <!-- test variable --> <!-- update the last_type variable --> <xsl:variable name="last_type" select=".//ITEMTYPE"/> <!-- change variable --> <!-- output the new type --> <H1><xsl:value-of select=".//ITEMTYPE"/></H1> </xsl:if> <!-- output the item name --> <P><xsl:value-of select=".//NAME"/></P> </xsl:for-each> </BODY> </HTML> </xsl:template> </xsl:stylesheet> David Carlisle wrote: > <xsl:template name="sub"> > <xsl:variable name="foo" select="'abc'"/> > <xsl:value-of select="$foo"/> > <xsl:variable name="foo" select="'def'"/> > <xsl:value-of select="$foo"/> > </xsl:template> > > Calling this template will output -- abcdef > > that was legal xsl until one of the later drafts, October perhaps > can't remember exactly when they decided to ban such `shadowing'. > There is no way you can ever need such a feature as it is always > possible to change the second variable name to foo2. You are > not really changing the value f foo, just declaring a new variable with > the same name that `hides' the first. As it is always possible to tell > just from the position in the template, which variable is being > referenced by $foo no functionality is lost by insisting that the second > variable has a different name. > > David > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: Change the value of global vari, David Carlisle | Thread | Re: Change the value of global vari, David Carlisle |
Re: Serialize DOM, Ingo Macherius | Date | Re: EZ/X Speed:, Rick Ross |
Month |