Built-in template rule for attributes

Subject: Built-in template rule for attributes
From: "John E. Simpson" <simpson@xxxxxxxxxxx>
Date: Mon, 04 Sep 2000 16:28:35 -0400
Hello all --

Section 5.8 of the XSLT Rec says that the built-in template rule for text nodes and attributes is:

   <xsl:template match="text()|@*">
     <xsl:value-of select="."/>

One subtlety that's always confused me is: Why, given this built-in rule, is the value of each attribute *not* copied to the result tree? In other words, how is this rule different from one in which the match attribute's value is simply "text()" rather than "text()|@*" ?

My understanding is that this built-in rule, together with the one for the root and element nodes, applies to all text or attribute nodes that are children of any element (per the <xsl:apply-templates> element in the root/element node built-in). Since XPath dictates that attributes aren't children of the elements to which they apply, I understand why attribute values wouldn't be copied. I'm just after the logic, therefore, of including the |@* in the text/attribute node built-in.

[Have just re-joined XSL-List after a months-long hiatus. Very happy to be back!]

John E. Simpson          | "I spilled spot remover on my dog.
http://www.flixml.org    | He's gone now." (Steven Wright)
simpson@xxxxxxxxxxx      |

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

Current Thread