match attribute is one of the most important parts of XSLT, because it controls which XML nodes a template applies to.
1. What match Does
-
The match attribute of <xsl:template> contains an XPath pattern.
-
It tells the XSLT processor:
“This template applies whenever a node in the source XML matches this pattern.”
-
Patterns can be broad (match="*") or very specific (match="/library/book/title").
2. Basic Usage
<xsl:template match="book">
<!-- What to output when a <book> element is encountered -->
</xsl:template>
This template applies whenever the processor encounters a <book> element in the XML.
3. Common Match Patterns
| Pattern |
Meaning |
/ |
Matches the root node (the entire XML document). |
* |
Matches any element (wildcard). |
book |
Matches all <book> elements at any level. |
/library/book |
Matches <book> elements that are direct children of <library>. |
//book |
Matches all <book> elements anywhere in the document. |
book/title |
Matches <title> elements inside a <book>. |
@id |
Matches attributes named id. |
@* |
Matches any attribute. |
text() |
Matches text nodes (the actual text content inside elements). |
4. Example
XML:
<library>
<book id="b1">
<title>1984</title>
<author>George Orwell</author>
</book>
<book id="b2">
<title>Brave New World</title>
<author>Aldous Huxley</author>
</book>
</library>
XSLT:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- Root template -->
<xsl:template match="/">
<html>
<body>
<h2>Library</h2>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<!-- Match the <library> element -->
<xsl:template match="library">
<ul>
<xsl:apply-templates/>
</ul>
</xsl:template>
<!-- Match <book> elements -->
<xsl:template match="book">
<li>
<xsl:value-of select="title"/>
(<xsl:value-of select="author"/>)
</li>
</xsl:template>
</xsl:stylesheet>
Output:
<html>
<body>
<h2>Library</h2>
<ul>
<li>1984 (George Orwell)</li>
<li>Brave New World (Aldous Huxley)</li>
</ul>
</body>
</html>
5. Match Precedence
-
If two templates could match the same node, the most specific one wins.
-
Example:
<xsl:template match="book"> ... </xsl:template>
<xsl:template match="library/book"> ... </xsl:template>
6. Key Takeaways
-
match="/" → starting point (root).
-
match="elementName" → handles specific elements.
-
match="@attrName" → handles attributes.
-
match="*" or @* → wildcard patterns.
-
More specific patterns override general ones.
.