Subject: [xsl] Identity Transform|
From: "Christian Roth" <roth@xxxxxxxxxxxxxx>
Date: Mon, 7 Nov 2005 12:24:28 +0100
Hi, this is a question for my own understanding. Browsing through posts on this list, I can find two forms of what's called "identity transform": ** Form 1 ** <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> ** Form 2 ** <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> (The difference is in the apply-templates' 'select' attribute.) Both seem to work when testing locally, both with Xalan and Saxon, seemingly no warnings, omissions or errors. However, XSLT specifies that first, one has to add attributes to a node before appending any children. Doesn't Form 2 first append child nodes and then attributes, which should either result in an error or silently discard the attributes? Has this something to do with document traversal order, i.e. while building the list of selected items using "node()|@*", the attribute nodes (satisfying the expression) are found first and are therefore added first to the list of items to be copied, in consequence satisfying the "attribute-before-children" requirement? Regards, Christian.