[xsl] nodes order in union

Subject: [xsl] nodes order in union
From: philippe drix <phdrix@xxxxxxx>
Date: Sat, 17 Nov 2001 19:05:09 +0100
Hi,
Thanks to David Carlisle, Jeni Tennison, and Michael Kay for their
responses 
to [xsl] match + default namespace.


I have now another little problem.
I want to write a recursive copy, following the example of the W3C REC
XSLT1.0 :


    <xsl:template match="child::node()" mode="copie">
		<xsl:copy>
			<xsl:apply-templates select="@*" mode="copie"/>
			<xsl:apply-templates select="node()" mode="copie" />
		</xsl:copy>
		
    </xsl:template>
    
That works fine.

And as expected, the following rule throws a runtime error, because we
try to bind attributes to an element which already owns some children : 
    
    <xsl:template match="child::node() | attribute::*" mode="copie">
		<xsl:copy>
			<xsl:apply-templates select="node()" mode="copie" />
			<xsl:apply-templates select="@*" mode="copie"/>
		</xsl:copy>
		
    </xsl:template> 
    
But if I transform the rule like this :
    
    
    <xsl:template match="child::node() | attribute::*" mode="copie">
		<xsl:copy>
			<xsl:apply-templates select="node()|@*" mode="copie"/>
		</xsl:copy>
		
    </xsl:template>
    
 or like this :
    
    
    <xsl:template match="child::node() | attribute::*" mode="copie">
		<xsl:copy>
			<xsl:apply-templates select="@*|node()" mode="copie"/>
		</xsl:copy>
		
    </xsl:template>
    
no error happens, and the copy is quite correct.

Is the XSLT processor (Saxon, actually) cleaver enougth to process the
nodes in right order ? Or is there somewhere in Xpath or XSLT a rule
which says that in this particulary case, union must yield a node-set
where attributes are located before other nodes (I can't find it)? 

Best regards,
Philippe Drix

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread