Re: Using node-sets in reverse document order?

Subject: Re: Using node-sets in reverse document order?
From: Tony Graham <tgraham@xxxxxxxxxxxxxxxx>
Date: Sat, 10 Jul 1999 16:32:59 -0400 (EST)
At 10 Jul 1999 11:23 -0700, G. Ken Holman wrote:
 > At 99/07/10 13:44 -0400, Tony Graham wrote:
 > >The ancestor, ancestor-or-self, preceding, and preceding-sibling axes
 > >contain nodes in reverse document order.  How is it possible to
 > >iterate over the nodes in that order when xsl:for-each processes nodes
 > >in document order and xsl:sort sorts on string value, not document
 > >order?
 > By "walking" the source tree along the axis in the direction of the first
 > member of the context node list, rather than dealing with the context node
 > list as a whole.
 > >How can I do something like the following that will order the selected
 > >nodes in reverse document order?
 > >
 > >   <xsl:for-each select="from-ancestors(node())">
 > >     <p>Element: <xsl:value-of select="qname()"/></p>
 > >   </xsl:for-each>
 > My example below illustrates how.
 > I hope this helps.

It did, but since I simplified my example, you weren't to know that I
wanted to iterate over all the ancestors, including the root node.
The modified stylesheet included below does that.

I was looking for a generalised technique since the tutorial
stylesheet for which which I want nodes in reverse document order
illustrates all of the axes, and I didn't want to have to do something
special for the four axes that are in reverse document order when I
could just use the built-in facilities for the axes that happened to
be in document order.


Tony Graham
Tony Graham                            mailto:tgraham@xxxxxxxxxxxxxxxx
Mulberry Technologies, Inc.      
17 West Jefferson Street                    Direct Phone: 301/315-9632
Suite 207                                          Phone: 301/315-9631
Rockville, MD  20850                                 Fax: 301/315-8285
  Mulberry Technologies: A Consultancy Specializing in SGML and XML

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="";>

<xsl:template match="/">                    <!--root rule-->
    <xsl:apply-templates mode="start" select="//e"/>

<xsl:template mode="start" match="*">
    <xsl:text>&#xa;Document Order:</xsl:text>
    <xsl:for-each select="from-ancestors(*)">
      <xsl:text>&#xa;Element: </xsl:text>
      <xsl:value-of select="qname()"/>

    <xsl:text>&#xa;&#xa;Axis Order:</xsl:text>
    <xsl:apply-templates select="from-ancestors(node()[1])" mode="ancestors"/>

<xsl:template match="/" mode="ancestors">

<xsl:template match="*" mode="ancestors">
    <xsl:text>&#xa;Element: </xsl:text>
    <xsl:value-of select="qname()"/>
    <xsl:apply-templates select="from-ancestors(node()[1])" mode="ancestors"/>


 XSL-List info and archive:

Current Thread