xsl-list
[Top] [All Lists]

RE: <xsl:for-each> not working...

2003-07-15 14:29:56
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(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com]On Behalf Of 
David
Carlisle
Sent: Tuesday, July 15, 2003 1:27 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] <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



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