Subject: RE: XSLT 1.0 - are parentless elements in a node-set siblings?
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 10 Dec 2007 16:21:27 -0000
|
exslt:node-set() isn't defined in the W3C standard so it's hard to argue
that any implementation of it is incorrect.
But I find it hard to imagine a coherent instance of the XPath 1.0 data
model in which there are four elements reachable by the expression "/*", and
yet none of those elements is reachable using the preceding axis from any
other.
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Andrew Welch [mailto:andrew.j.welch@xxxxxxxxx]
> Sent: 10 December 2007 16:06
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: XSLT 1.0 - are parentless elements in a
> node-set siblings?
>
> Given:
>
> <foo>
> <baz>a</baz>
> <baz>b</baz>
> <baz>a</baz>
> <baz>b</baz>
> </foo>
>
> and a stylesheet that finds unique values using the preceding
> axis on a node-set:
>
> <xsl:stylesheet
> xmlns:exslt="http://exslt.org/common"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
>
> <xsl:variable name="baz-rtf">
> <xsl:copy-of select="//baz"/>
> </xsl:variable>
>
> <xsl:variable name="baz" select="exslt:node-set($baz-rtf)"/>
>
> <xsl:template match="/">
> <xsl:for-each select="$baz/baz[not(. = preceding::baz)]">
> <xsl:value-of select="."/>
> </xsl:for-each>
> </xsl:template>
>
> </xsl:stylesheet>
>
> Xalan produces:
>
> "abab"
>
> whilst Saxon 6.5.5 gives (the expected result):
>
> "ab"
>
> It seems to be because the elements copied to "baz-rtf" don't
> have a common parent element, they aren't siblings in Xalan...
>
> If I modify the rtf to have a common parent:
>
> <xsl:variable name="baz-rtf">
> <root>
> <xsl:copy-of select="//baz"/>
> </root>
> </xsl:variable>
>
> then it generates the expected results using both Saxon and Xalan...
>
> Which is correct in this case?
>
> cheers
> andrew
|