The Default Template Rule for Element and Root Nodes
The most important template rule is the one that guarantees that children are processed. Here is that rule:
<xsl:template match="*|/"> <xsl:apply-templates/> </xsl:template>
The asterisk *
is an XPath
wildcard that matches all element nodes, regardless of what name
they have or what namespace they’re in. The forward slash /
is an XPath expression that matches the
root node. This is the first node the processor selects for
processing, and, therefore, this is the first template rule the
processor executes (unless a nondefault template rule also matches
the root node). Again, the vertical bar combines these two
expressions so that the rule matches both the root node and element
nodes. In isolation, this rule means that the XSLT processor
eventually finds and applies templates to all nodes except attribute
and namespace nodes because every nonattribute, non-namespace node
is either the root node, a child of the root node, or a child of an
element. Only attribute and namespace nodes are not children of
their parents. (You can think of them as disinherited nodes.)
Of course, templates may override the default behavior. For
example, when you include a template rule matching person
elements in your stylesheet, then
children of the matched person
elements are not necessarily processed, unless one of your own
template rules says to process them.
Get XML in a Nutshell, 3rd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.