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.
Regards,
Tony Graham
======================================================================
Tony Graham mailto:tgraham@xxxxxxxxxxxxxxxx
Mulberry Technologies, Inc. http://www.mulberrytech.com
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="http://www.w3.org/XSL/Transform/1.0">
<xsl:template match="/"> <!--root rule-->
<xsl:apply-templates mode="start" select="//e"/>
</xsl:template>
<xsl:template mode="start" match="*">
<xsl:text>
Document Order:</xsl:text>
<xsl:for-each select="from-ancestors(*)">
<xsl:text>
Element: </xsl:text>
<xsl:value-of select="qname()"/>
</xsl:for-each>
<xsl:text>

Axis Order:</xsl:text>
<xsl:apply-templates select="from-ancestors(node()[1])" mode="ancestors"/>
</xsl:template>
<xsl:template match="/" mode="ancestors">
<xsl:text>
Root</xsl:text>
</xsl:template>
<xsl:template match="*" mode="ancestors">
<xsl:text>
Element: </xsl:text>
<xsl:value-of select="qname()"/>
<xsl:apply-templates select="from-ancestors(node()[1])" mode="ancestors"/>
</xsl:template>
</xsl:stylesheet>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|