Re: xslt trouble with xsl:if

Discussion in 'XML' started by Peter Flynn, Apr 20, 2008.

  1. Peter Flynn

    Peter Flynn Guest

    z1 wrote:
    > hi-
    >
    > i am fooling around with soap and weather templates.
    > for some reason either this if or select is failing.
    > i am very new to xml and found this code at another site.
    > i can show you the xml and then the xslt sample code that is not matching.
    > please look and if it jumps right off the page give me a tip on why it didnt
    > select the data.
    > i think for most xslt people this will be easy. i want the if to work if it
    > is null because
    > the weather service may return null for an attribute.
    >
    > from the government weather service:
    > <weather time-layout="k-p24h-n5-1">
    > <name>Weather Type, Coverage, and Intensity</name>
    > <weather-conditions weather-summary="Increasing Clouds"/>
    > <weather-conditions weather-summary="Partly Cloudy"/>
    > <weather-conditions weather-summary="Partly Cloudy"/>
    > <weather-conditions weather-summary="Mostly Sunny"/>
    > <weather-conditions weather-summary="Chance Rain Showers">
    > <value coverage="chance" intensity="light" weather-type="rain
    > showers" qualifier="none"/>
    > </weather-conditions>
    > </weather>
    >
    >
    > from a sample template i found:
    > <xsl:template name="weather">
    > <xsl:param name="position" />
    > <xsl:if
    > test="/dwml/data/parameters/weather/weather-conditions[position()=$position]/@weather-summary
    > !=''">


    Depending on how the incoming data is handled (parsed as well-formed
    only, or validated), position() may evaluate to one of two things:

    a) what you intuitively expect (if you're used to normal text document
    markup (HTML, DocBook, TEI, etc): the numeric position of the
    weather-conditions *element node* among its siblings (eg for
    @weather-summary='Partly Cloudy' this would be "2" and "3");

    b) what you don't expect (unless you came to XML via the "data-only"
    route): the numeric position of the matching node among *all* types of
    siblings, including the "name" element and the (otherwise irrelevant)
    white-space between the weather-conditions elements (eg for
    @weather-summary='Partly Cloudy' this would be "6" and "8").

    I'm unclear why it would want to identify the weather-conditions element
    by position anyway.

    The reliable way of matching location-among-siblings is to use
    [count(preceding-sibling::weather-conditions)+1=$position]

    > <xsl:value-of
    > select="/dwml/data/parameters/weather/weather-conditions[position()=$position]/@weather-summary"/>
    > </xsl:if>
    > </xsl:template>
    >
    > other parts of the templates are generating output (not formatted yet
    > though)
    > assuming that the path is correct and it looks like it is, why wont this
    > match?


    Use xsl-message and xsl:value-of to output the actual value of $position
    to the console during execution so you can debug it.

    > @weather-summary is the attribute that has a value associated with it that
    > is not null.
    > the path from the root looks ok....


    You haven't shown us the whole document, so we'll take it on trust that
    there is a containing structure reflecting /dwml/data/parameters

    > i want to get into learning a little bit more about xml and xslt.
    > i have a book on it and am currently studing a css book too.
    > i like the fact that when i combine all the templates with html i can have
    > it output
    > the results formatted. i need to get better at the xslt processing.


    Dave Pawson's excellent XSL FAQ (http://www.dpawson.co.uk/xsl/), and
    Mulberry's XSL-LIST mailing list
    (http://www.mulberrytech.com/xsl/xsl-list/index.html) are your friends.

    ///Peter
    --
    XML FAQ: http://xml.silmaril.ie/
     
    Peter Flynn, Apr 20, 2008
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Kevin Flood
    Replies:
    0
    Views:
    1,028
    Kevin Flood
    Sep 8, 2004
  2. Kevin Flood
    Replies:
    1
    Views:
    2,747
    Kevin Flood
    Sep 13, 2004
  3. Klaus Friese
    Replies:
    0
    Views:
    477
    Klaus Friese
    Nov 22, 2004
  4. Vijay singh
    Replies:
    1
    Views:
    438
    Martin Honnen
    Nov 4, 2004
  5. Replies:
    1
    Views:
    3,622
    A. Bolmarcich
    May 27, 2005
Loading...

Share This Page