xsl-list
[Top] [All Lists]

RE: [xsl] XSLT 1.0 - are parentless elements in a node-set siblings?

2007-12-10 09:22:08
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(_dot_)j(_dot_)welch(_at_)gmail(_dot_)com] 
Sent: 10 December 2007 16:06
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] 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

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--