Understanding XSLT Transformations: Matching and Selecting with Templates - Matching with “root”, “particular node” and selecting in different ways
(Page 3 of 4 )
This example mainly contains two files. The first would be an XML file (Sample2.xml), which is same as above and the second would be an XSL file (Sample2_5.xsl). Now, let us look at “Sample2_5.xsl”:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<body>
<table border="1">
<xsl:apply-templates select="Names"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="Names">
<tr>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
The above XSL is bit different from all of the previous ones. Here I am using two types of templates. One matches on “root” and the other on “Names”. When we work with “root” template node, the flow of execution always starts at “root” template. So, you can understand that, it starts emitting HTML, BODY and TABLE.
After emitting “TABLE” tag the control searches for other templates based on matching of “Names” and other nested elements. And automatically, it finds the second template “Names” (which is in the same line). And finally displays the entire text available in “Names” (along with whole text of nested elements).
Before execution, make sure that you modify the XSL file name (to “Sample2_5.xsl”) within the XML document. When you execute the above you will get the following output, which is different from all of the above:
<?xml version="1.0" encoding="utf-16"?>
<html>
<body>
<table border="1">
<tr>
<td>
these are the names
Jag
Win
Dhan
Ram
</td>
</tr>
</table>
</body>
</html>
But the above is not the way we want. We want every name to be displayed in a different “td”. I shall explain to you about it later in the coming sections.
Matching with “root” and selecting with “element path” – extended way
This example mainly contains two files. The first would be an XML file (Sample2.xml), which is same as above and the second would be an XSL file (Sample2_4.xsl). Now, let us look at “Sample2_4.xsl”:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<body>
<b>
<xsl:value-of select="Names/Name"/>
</b>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
The most important statements of the whole XSL are the following:
<xsl:template match="/">
…
<xsl:value-of select="Names/Name"/>
…
</xsl:template>
Now, the matching is again based on “root” node. The selection is based on “Names/Name” which is bit different than that of the previous one. Within the root node, you are selecting only “Names/Name” element (only the first element). It finally retrieves all the text of the element “Name” (along with its own nested elements) available in “Names” element from the “root” node.
Before execution, make sure that you modify the XSL file name (to “Sample2_4.xsl”) within the XML document. When you execute the above you will get the following output, which is different from all of the above:
<?xml version="1.0" encoding="utf-16"?>
<html>
<body>
<b>Jag</b>
</body>
</html>
Next: What are the default templates? >>
More XML Articles
More By Jagadish Chaterjee