Subject: Re: [xsl] Accessing the Nth Occurrence of an Element From: "Andrew Welch" <andrew.j.welch@xxxxxxxxx> Date: Tue, 16 Sep 2008 13:49:10 +0100 |
2008/9/16 David Carlisle <davidc@xxxxxxxxx>: > > >> b) the -or-self part of the // axis is pointless when starting at the root > > Actually I think I mislead you there. > > > two reasons, > > firstly //foo always selects the same nodes as > decendant::foo even if used as a relative xpath. Because there is an > implied child axis in the final step. > > //self::foo selects the same nodes as /descendant-or-self::foo > > > secondly you have to be careful about trees whose root node is an > element. If the current node is such a parentless foo element then > descendant::foo will not select the element, descendant-or-self::foo > will select the element and //foo is an error > XPDY0050: The root of the tree containing the context item is not a document node > > > > > > <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> > > > <xsl:variable name="x" as="element()"> > <foo a="1"> > <foo a="2"/> > <foo a="3"/> > </foo> > </xsl:variable> > > > <xsl:template name="main"> > <xsl:for-each select="$x"> > > <!--A: <xsl:value-of select="//foo/@a"/>--> > B: <xsl:value-of select="root()//foo/@a"/> > C: <xsl:value-of select="root()//self::foo/@a"/> > <!--D: <xsl:value-of select="/descendant::foo/@a"/>--> > E: <xsl:value-of select="root()/descendant::foo/@a"/> > <!--F: <xsl:value-of select="/descendant-or-self::foo/@a"/>--> > G: <xsl:value-of select="root()/descendant-or-self::foo/@a"/> > </xsl:for-each> > </xsl:template> > > </xsl:stylesheet> > > > > B: 2 3 > C: 1 2 3 > > E: 2 3 > > G: 1 2 3 > Nice... had to read that a few times and think about it, especially calling root() on variable with type element()... Consider: <xsl:variable name="x" as="element()+"> <foo/> <foo/> </ Calling count($x/root()) returns 2.... which is odd at first, but not really when each element is both an element and a root node. Calling count($x[2]/preceding-sibling::*) returns 0, because effectively the two are separate trees, which helps explain the usual sibling issues with rootless trees (er, what's the terminology here - "sequence of element-root nodes"?) Either way, perhaps it should have read: b) the -or-self part of the // axis is pointless when starting at a document node -- Andrew Welch http://andrewjwelch.com Kernow: http://kernowforsaxon.sf.net/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Accessing the Nth Occurre, David Carlisle | Thread | Re: [xsl] Accessing the Nth Occurre, mike leonard |
RE: [xsl] Date YYYYMMDD format XSLT, Pankaj Chaturvedi | Date | Re: [xsl] Accessing the Nth Occurre, mike leonard |
Month |