[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: two nodes are iterating

Subject: Re: two nodes are iterating
From: Mike Brown <mike@xxxxxxxx>
Date: Mon, 16 Dec 2002 17:56:34 -0700 (MST)
geo gpx
NIENKE, Bill P. - ACCOR-NA wrote:
> Almost everything works as it should, except the geo:name
> and the geo:url nodes aren't iterating as they should.

The meat of your stylesheet is this (I've added line #s):

 1  <xsl:template match="/">
 2   <xsl:apply-templates select="/geo:gpx/geo:wpt/geo:desc">
 3     <xsl:sort select="geo:desc" data-type="text" order="ascending"/>
 4   <xsl:apply-templates>
 5  </xsl:template>
 6
 7  <xsl:template match="/geo:gpx/geo:wpt/geo:desc">
 8    <a>
 9      <xsl:attribute name="href">
10        <xsl:value-of select="/geo:gpx/geo:wpt/geo:url"/>
11      </xsl:attribute>
12      <xsl:value-of select="."/>
13    </a>
14    <xsl:text> - </xsl:text>
15    <xsl:value-of select="/geo:gpx/geo:wpt/geo:name"/>
16    <br/>
17  </xsl:template>

On line 2, you're saying "find all geo:desc elements that are children of
geo:wpt elements that are children of geo:gpx elements that are children of
the root node, and go process them". You're already processing the root node,
so I'd omit the leading '/' from the expression, just to save a few bytes.

But wait, don't change anything yet.

On line 3, you're saying to process the nodes identified in line 2 as if they 
were sorted in ascending order by the string-value of their first geo:desc 
child. If this is working for you, then it means your geo:desc elements have 
geo:desc children, like (pardon my syntax)...

<geo:gpx>
  <geo:wpt>
    <geo:desc>
      <geo:desc>
      ...

...if this isn't right, and you only have one level of geo:desc, you probably
wanted select="." in the xsl:sort.

But wait, don't change anything yet.

On line 7, you're saying this template is a good match for any geo:desc
element that is a child of a geo:wpt element that is a child of a geo:gpx
element that is a child of the root node. Since there are no
xsl:apply-templates instructions that mandate the processing of any geo:desc
elements that wouldn't match that pattern, you should change this to
match="geo:desc", for efficiency.

But wait, don't change anything yet.

On line 10, you're saying create a text node using the string-value of all
geo:url elements that are children of geo:wpt elements that are children of
geo:gpx elements that are children of the root node. The string-value of a
node-set is the string-value of the first node in the set. So here's where 
part of your 'iteration' problem is.

I'm getting the impression that your XML looks like this:

<geo:gpx>
  <geo:wpt>
    <geo:name>...</geo:name>
    <geo:desc>...</geo:url>
    <geo:url>...</geo:url>
  </geo:wpt>
  ...
</geo:gpx>

(It really would've helped if you had posted a sample)

If that's the case, then here's what you should do:

1. change line 2 to select geo:gpx/geo:wpt
2. leave line 3 the way it is
3. change line 7 to match geo:wpt
4. change line 10 to select geo:url
5. change line 12 to select geo:desc, and 
6. change line 15 to select geo:name.

The idea is that when processing a geo:wpt element, you look at
its geo:url, geo:desc, and geo:name child elements.

Mike

-- 
  Mike J. Brown   |  http://skew.org/~mike/resume/
  Denver, CO, USA |  http://skew.org/xml/

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.