Subject: RE: [xsl] Re: <xsl:choose> or variable syntax incorrect? From: "Kathy Burke" <Kathy_Burke@xxxxxxxxx> Date: Fri, 26 Sep 2003 15:25:57 -0400 |
Thanks Brook, that certainly is less complex! I'm using a very simple test xml file with three <Station> elements, 2 have <Board>s, 1 doesn't. My test, however, still results in the <otherwise> -- blue row for all 3 <Stations>. My xml: <Station name='StationOne'> <Boards> <Board sn='123'/> <Board sn='124'/> </Boards> </Station> <Station name='StationTwo'> <Boards> <Board sn='125'/> </Boards> </Station> <Station name='StationThree'> <Boards> </Boards> </Station> Thanks for responding. Kathy -----Original Message----- From: Brook Ellingwood [mailto:brook@xxxxxxxxxxx] Sent: Friday, September 26, 2003 3:07 PM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: Re: [xsl] Re: <xsl:choose> or variable syntax incorrect? 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 < 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 < 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 XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Re: <xsl:choose> or vari, Passin, Tom | Thread | Re: [xsl] Re: <xsl:choose> or vari, Brook Ellingwood |
RE: [xsl] Re: <xsl:choose> or vari, Passin, Tom | Date | RE: [xsl] Re: <xsl:choose> or vari, Passin, Tom |
Month |