[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] Re: or variable syntax incorrect?


Subject: Re: [xsl] Re: <xsl:choose> or variable syntax incorrect?
From: Brook Ellingwood <brook@xxxxxxxxxxx>
Date: Fri, 26 Sep 2003 12:07:14 -0700

Okay, I haven't followed this whole thread but when I parse your code in
your last mail, I see that you have unclosed <tr> tags. Aside from that, it
seems to me that you are making a simple boolean test way too complex:

Try this:

<xsl:template match="Station">
    <xsl:choose>
        <xsl:when test ="./boards">
             <tr bgcolor="red" valign="middle">
                  <td><xsl:value-of select="@name"/></td>
              </tr>
        </xsl:when>
        <xsl:otherwise>
            <tr bgcolor="navy" valign="middle">
                <td><xsl:value-of select="@name"/></td>
            </tr>  
            </xsl:otherwise>
     </xsl:choose>
</xsl:template>

Hope that helps.

-- Brook


> From: "Kathy Burke" <Kathy_Burke@xxxxxxxxx>
> Reply-To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Date: Fri, 26 Sep 2003 14:38:06 -0400
> To: "'xsl-list@xxxxxxxxxxxxxxxxxxxxxx'" <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
> Subject: RE: [xsl] Re: <xsl:choose>  or variable syntax incorrect?
> 
> First, I truly appreciate your responding. But please tell me how I did not
> "explain the problem I've solving"? I honestly thought I did!
> 
> <station name='StationOne'>
> <boards>
> <board sn='123'/>
> <board sn='124'/>
> </boards>
> </station>
> 
> If there are no <board> elements in the <station> element, I would like to
> have a blue row with the value-of the <station> name attribute as text:
> 
> -----------------------------------
> Station One  (in red text)
> -----------------------------------
> 
> Otherwise, I would like the same text (Station One) but in a blue row.
> 
> I still don't understand why this doesn't work:
> 
> <xsl:template match="Station">
> 
> <xsl:variable name="boards" select="//Station[name='@name']/Boards/Board"/>
> //to select the boards under the specific station for each node?
> 
> <xsl:variable name="nboards" select="count($boards)" />
> //to count the result of the nodeset above?
> 
> <xsl:choose>
> <xsl:when test="$nboards &lt; 1">  //if variable is < 1 (or empty)
> <tr bgcolor="navy" valign="middle"> //create a blue row
> <td><xsl:value-of select="@name"/></td> //put the name attribute text here
> </xsl:when>
> <xsl:otherwise>
> <tr bgcolor="red" valign="middle">   //otherwise, create a red row
> <td><xsl:value-of select="@name"/></td>
> </xsl:otherwise>
> </xsl:choose>
> 
> Although it doesn't work, why is it SO dreadful? If I could correctly return
> the variant I need (are there boards for this station?) wouldn't the rest be
> ok?
> 
> I came up with this either out of books or from the MANY examples I've read
> on the newsgroups.
> 
> I have read Jeni's book (and M. Kay's as well). Unfortunately, that doesn't
> mean I've absorbed it all :-?
> 
> If you, or anyone, could please point me to an example of what I've
> described, I would truly appreciate it.
> 
> Thanks again.
> 
> Kathy
> 
> 
> -----Original Message-----
> From: Dimitre Novatchev [mailto:dnovatchev@xxxxxxxxx]
> Sent: Friday, September 26, 2003 2:29 PM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Re: <xsl:choose> or variable syntax incorrect?
> 
> 
> 
> "Kathy Burke" <Kathy_Burke@xxxxxxxxx> wrote in message
> news:395DE57EA5BB7F4E952B7B89775350B5021E4208@xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
>> Same problem...but perhaps not the variable name issue? I've used the
>> current() syntax per Dimitri. Again, I'm trying to get a navy row if the
>> when test < 1 count, otherwise red. My xml source has three <Station>
>> elements, 2 have <Board> elements, 1 does not. However, all rows remain
>> navy. Any other comments on where I could be gong astray with the
> following?
> 
> You could be going astray almost everywhere -- the code full of weird things
> to me.
> 
>> 
>> <xsl:template match="Station">
>> 
>> <xsl:variable name="boards"
> select="//Station[current()/@name]/Boards/Board"
>> />
> 
> ^^^^^^^^^^^^^^^^^
> 
> Are you sure you really *mean* this? This predicate is true if the current
> node has a "name" attribute (which is probably always the case).
> 
> 
>> <xsl:variable name="nboards" select="count($boards)" />
> 
> Because you're later testing to see if the count is less than one or not,
> you do not need the count at all. You just need whether the nodeset is empty
> or not -- this happens to be the expression
> 
> $boards
> 
> itself.
> 
>> 
>> <xsl:choose>
>> 
>> <xsl:when test="$nboards &lt; 1">
>> <tr bgcolor="navy" valign="middle">
>> <td><xsl:value-of select="@name"/></td>
>> </xsl:when>
>> 
>> <xsl:otherwise>
>> <tr bgcolor="red" valign="middle">
>> <td><xsl:value-of select="@name"/></td>
>> </xsl:otherwise>
>> 
>> </xsl:choose>
> 
> 
> This test seems also very strange for generating rows with alternating
> properties, but you haven't at all explained the problem you're solving, so
> it is difficult to say that what you're doing is just wrong.
> 
> 
> I strongly recommend reading a good introductory book on XSLT -- e.g.
> Jeni's:
> 
> "Beginning XSLT"
> 
> for everyone, who needs to start understanding some basic concepts and
> techniques in writing XSLT transformations.
> 
> 
> =====
> Cheers,
> 
> Dimitre Novatchev.
> http://fxsl.sourceforge.net/ -- the home of FXSL
> 
> 
> 
> 
> XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> 
> 
> 
> 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
Keywords