Wildcards
Wildcards match different element and node types at the same
time. There are three wildcards: *, node(
) , and @*.
The asterisk (*)
matches any element node regardless of name. For example, this XSLT
template rule says that all elements should have their child
elements processed but should not result in any output in and of
themselves:
<xsl:template match="*"><xsl:apply-templates select="*"/></xsl:template>
The * does not match
attributes, text nodes, comments, or processing-instruction nodes.
Thus, in the previous example, output will only come from child
elements that have their own template rules that override this
one.
You can put a namespace prefix in front of the asterisk. In this case, only
elements in the same namespace are matched. For example, svg:* matches all elements with the same
namespace URI as the svg prefix
is mapped to. As usual, it’s the URI that matters, not the prefix.
The prefix can be different in the stylesheet and the source
document as long as the namespace URI is the same.
The node( ) wildcard
matches not only all element types but also the root node, text
nodes, processing-instruction nodes, namespace nodes, attribute
nodes, and comment nodes.
The @* wildcard matches all attribute nodes. For example,
this XSLT template rule copies the values of all attributes of a
person element in the document
into the content of an attributes
element in the output:
<xsl:template match="person"> <attributes><xsl:apply-templates select="@*"/></attributes> </xsl:template> ...