I read some XSLT examples and found that code:
<xsl:apply-template select="@*|node()"/>
What does that mean?
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
The XPath expression
@* | node()selects the union of attribute nodes (@*) and all other types of XML nodes (node()).It is a shorthand for
attribute::* | child::node().In XSLT, XPath is relative to the context node and the default selection axis is the
childaxis, so the expressionselect="..."expression, for example in<xsl:apply-templates>)match=""expression in<xsl:template>) – note that there is a difference between selecting nodes and matching them: the context node only matters for selection.Imagine the following node is the context node:
the expression
node()will not only select both<child>nodes, but also four whitespace-only text nodes (signified by[and]for the sake of visibility) and the comment. The<descendant>is not selected.A special characteristic of XML is that attribute nodes are not children of the elements they belong to (although the parent of an attribute is the element it belongs to).
This asymmetric relationship makes it necessary to select them separately, hence the
@*.It matches any attribute node belonging to the context node, so the
attr="value"will be selected as well.The
|is the XPath union operator. It creates a singe node set from two separate node-sets.<xsl:apply-templates>then finds the appropriate<xsl:template>for every selected node and runs it for that node. This is the template matching part I mentioned above.