RE: [xsl] Can't Obtain Results

Subject: RE: [xsl] Can't Obtain Results
From: "Michael Kay" <michael.h.kay@xxxxxxxxxxxx>
Date: Fri, 3 May 2002 12:54:07 +0100
Fascinating. Jeni and I both tried to guess your requirements from your
example output, and we guessed quite different. Just shows the dangers.

Michael Kay
Software AG
home: Michael.H.Kay@xxxxxxxxxxxx
work: Michael.Kay@xxxxxxxxxxxxxx

> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]On Behalf Of
> Jeni Tennison
> Sent: 03 May 2002 09:20
> To: Lindy Quick
> Cc: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: [xsl] Can't Obtain Results
>
>
> Hi Lindy,
>
> > This is a repost to my previous messages. I have had to replace the
> > greater than sign with the # sign so it can be sent through this
> > mail client.
>
> You could try using &lt; in your mail client -- it sounds as though
> it's expecting you to use HTML, in which case &lt; should be passed
> through as a less-than sign.
>
> > I am passing in a parameter called outlet
> >
> > If the outlet parameter is "cb" - after transformation I want it to
> > look like this:
> >
> >  #root>
> >    #keyset>
> >      #f1>some text#/f1>
> >      #f2>SOMETEXT#/f2>
> >      #f3>SOMETEXT#/f3>
> >      #f4> SOMETEXT#/f4>
> >      #f5> SOMETEXT#/f5>
> >      #f6>some text#/f6>
> >    #/keyset>
> >  #/root>
> >
> > If the outlet parameter is "default" - after transformation I want
> > it to look like this:
> >
> >  #root >
> >    #keyset >
> >      #f1>some text#/f1>
> >      #f2>some text#/f2>
> >      #f3>some text#/f3>
> >      #f6>some text#/f6>
> >    #/keyset>
> >  #/root>
>
> It appears to me that the rule is that you want f1 to f6 elements to
> appear, containing the value from the keyset with the correct outlet
> if there is one, the value from the keyset without an outlet attribute
> if there isn't one, or not appearing at all if neither keyset contains
> a value.
>
> In which case, you should have a template that will do the right thing
> for a given element name, something like:
>
> <xsl:param name="outlet" select="'cb'" />
>
> <xsl:template name="showElement">
>   <xsl:param name="elementName" />
>   <xsl:variable name="value" select="/root/keyset[@outlet = $outlet]
>                                        /*[name() = $elementName]" />
>   <xsl:choose>
>     <xsl:when test="$value">
>       <xsl:copy-of select="$value" />
>     </xsl:when>
>     <xsl:otherwise>
>       <xsl:variable name="defaultValue"
>         select="/root/keyset[not(@outlet)]/*[name() =
> $elementName]" />
>       <xsl:if test="$defaultValue">
>         <xsl:copy-of select="$defaultValue" />
>       </xsl:if>
>     </xsl:otherwise>
>   </xsl:choose>
> </xsl:template>
>
> Then you need to call this template to create the elements f1 to f6:
>
> <xsl:template match="/">
>   <xsl:call-template name="showElement">
>     <xsl:with-param name="elementName" select="'f1'" />
>   </xsl:call-template>
>   <xsl:call-template name="showElement">
>     <xsl:with-param name="elementName" select="'f2'" />
>   </xsl:call-template>
>   ...
>   <xsl:call-template name="showElement">
>     <xsl:with-param name="elementName" select="'f6'" />
>   </xsl:call-template>
> </xsl:template>
>
> If you don't want to hard-code the element names like this, then you
> need to come up with an algorithm that you can use to get hold of the
> names of the elements in the order that you want them. This is quite
> difficult with your XML design; it really requires a grouping
> solution, as far as I can see. Let us know if you need to do that,
> particularly if your elements aren't really called 'f1' to 'f6'...
>
> Cheers,
>
> Jeni
>
> ---
> Jeni Tennison
> http://www.jenitennison.com/
>
>
>  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