[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: <xsl:for-each> not working...
Sir, your recommended piece of code doesn't do much different from what my code was doing. I want the heading "Output Descriptions" to be displayed only once before the fields under the output parent are displayed. Here is a snippet of the input XML: <HSDataContainerType list="true" name="Outputs" required="true" revision="" systype="true"> <HSDataContainerType name="NoValueRestrictions" required="true" revision=""> <HSString name="required" required="true" xmlNodeType="1" /> <HSString name="optional_NoDefault" xmlNodeType="1"> <DefaultValue /> </HSString> <HSString name="optional_withDefault" xmlNodeType="1"> <DefaultValue>This is the default value</DefaultValue> </HSString> </HSDataContainerType> <HSDataContainerType name="TextValueRestrictions" required="true" revision=""> <HSString name="restrictByValue" required="true" restrictType="1" xmlNodeType="1"> <restrictedValue>CA</restrictedValue> <restrictedValue>WA</restrictedValue> <restrictedValue>VA</restrictedValue> </HSString> <HSString name="restrictByRange" required="true" restrictType="2" xmlNodeType="1"> <restrictedValue>0</restrictedValue> <restrictedValue>100</restrictedValue> </HSString> .... I think if i put the text "Output Descriptions" before the for-each loop, i would be able to separate the Heading from the icons and the field heading. So if i write my XSL like this: <b>Output Description: </b><br /><br /> <img src="texticon.gif"><a name="{generate-id(.)}"> <b><xsl:comment>Accessing the parent nodes...</xsl:comment> <xsl:for-each select="ancestor::*"> <xsl:choose> <xsl:when test="contains(@name, 'Inputs')"></xsl:when> <xsl:when test="contains(@name, 'Outputs') and not(ancestor::*[contains(@name,'Outputs')])"> <!-- <xsl:when test="contains(@name, 'Outputs')"> --> <a name="out"></a> </xsl:when> <xsl:when test="contains(@name, 'Settings')"></xsl:when> <xsl:otherwise> <xsl:if test="not(position()='1')"> <xsl:value-of select="@name" />/ </xsl:if> </xsl:otherwise> </xsl:choose> </xsl:for-each> But this doesn't solve the problem either since it puts "Output Descriptions" above every field with the ancestor 'Output'. The reason for this is that i am using certain templates which are called over and over again. Is there a way to put it inside and display it only without the icon. Thanks. John -----Original Message----- From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]On Behalf Of David Carlisle Sent: Tuesday, July 15, 2003 1:27 PM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: Re: <xsl:for-each> not working... it would have been easier if you'd shown the input but guessing.. change <xsl:when test="contains(@name, 'Outputs')"> to <xsl:when test="contains(@name, 'Outputs') and not(ancestor::*[contains(@name,'Outputs')])"> so you only get the first such name (this will search the ancestor list in quadratic time, but assuming your tree is only a few deep not thousands that doesn't really matter) I assume this is left over debuging <xsl:if test="contains(@name, 'Outputs')"></xsl:if> as it's always true (as it's inside an xsl:when with the same test) and doesn't do anything. 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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|