<xsl:template match="*|/">
<xsl:apply-templates/>
</xsl:template>
The asterisk * is an XPath wild-card pattern that
matches all element nodes, regardless of what name they have or what
namespace they're in. The forward slash
/ is an XPath pattern 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 it
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 your own template says to process them.