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

Re: Wah? Weird... Clarifying the Schema

Subject: Re: Wah? Weird... Clarifying the Schema
From: "M. David Peterson" <m.david@xxxxxxxxxx>
Date: Wed, 27 Oct 2004 22:05:56 -0700
for each previous
Why wouldnt it work? All you are telling the processor to do is sort the result-set of the for-each loop. The resulting sort and the process of the original node-set being processes are two seperate processes and should not be confused by the fact that the sort element comes before the processing logic of the for-each loop. The sort element MUST be the first child (you can have multiple sort elements but they must follow each other sequentially w/o any other elements between the first and last sort element.) of for-each or apply-templates. Would be kind of a drag if that then meant that the elements were sorted first and then processed as such. Think:

sort = output in sorted order
and
for-each = processing in document order

And it might help things seem a little more clear.

Hope this helps!

<M:D/>

Michael wrote:

I've come across the strangest thing, and I'm trying to figure out why it occurs. I was hoping someone would enlighten me onto what is going on here:

I'm a recent member to the XSLT scene, so don't completely understand how the schema works to a full extend (i'm learning... slowly (grin)). Anyway, recently i've been playing around with some code that increments through each book in a catalog, and displays each book category from the catalog in a drop down box. To do this I decided to sort the catalog, incrementally go through each book node, then call a conditional statement that would only fire off if the previous node had a category that was different.

The weirdest thing happens here. Firstly, it has come to my attention that the 'preceding-sibling' axis is not effected by an 'xsl:sort' element. This is proved when removing the 'xsl:sort' element completely. The weird thing is that the code WORKS!!! So, i'm hoping I can get some clarification on this....

Why is the code working?

<xsl:for-each select="catalog/book">
<xsl:sort select="category" data-type="text" order="ascending" />
<xsl:if test="not(preceding-sibling::book/category = category)">
<xsl:choose>
<xsl:when test="category = $category">
<option value="{category}" selected="true"><xsl:value-of select="category" /></option>
</xsl:when>
<xsl:otherwise>
<option value="{category}"><xsl:value-of select="category" /></option>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:for-each>

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.