The first rule allows recursive processing to continue in case an
explicit rule does not match the current node or the root node:
<xsl:template match="*|/">
<xsl:apply-templates/>
</xsl:template>
This template matches all elements (*) and the root node (/), i.e.,
the document itself. It will not match processing instructions,
comments, attributes, or text. The
<xsl:apply-templates/> causes all children
that are not attribute nodes or processing instruction nodes to be
processed.
The second built-in rule is identical to the first, except it applies
to each mode used in the stylesheet:
<xsl:template match="*|/" mode="m">
<xsl:apply-templates mode="m"/>
</xsl:template>
Template modes are discussed in the next chapter, so we will not go
into details here. The third built-in rule simply copies all text and
attribute nodes to the result tree:
<xsl:template match="text( )|@*">
<xsl:value-of select="."/>
</xsl:template>
And finally, the built-in rule for processing instructions and
comments does nothing. This is why comments and processing
instructions in the input XML data do not automatically show up in
the result tree:
<xsl:template match="processing-instruction()|comment( )"/>