Rule: Use the built-in rules when you can!
There are two built-in template rules:
This traverses your descendants:
<xsl:template match="*|/"> <xsl:apply-templates/> </xsl:template>
This copies text to the output:
<xsl:template match="text()|@*"> <xsl:value-of select="."/> </xsl:template>
Note: Attribute text is only copied if you apply templates to an attribute.
These get dropped from the output:
<xsl:template match="processing-instruction()|comment()"/>
You get these for free and the processor will do them in an "optimal" way.