| <xsl:apply-imports> | |
| Allows you to apply any overridden templates to the current node. It is comparable to the super() method in Java. | |
| Category | |
|
Instruction |
|
| Required Attributes | |
|
None. |
|
| Optional Attributes | |
|
None. |
|
| Content | |
|
None. <xsl:apply-imports> is an empty element. |
|
| Appears in | |
|
<xsl:apply-imports> appears inside a template. |
|
| Defined in | |
|
XSLT section 5.6, Overriding Template Rules. |
|
| Example | |
|
Here is a short XML file we'll use to illustrate <xsl:apply-imports>:
<?xml version="1.0"?>
<test>
<p>This is a test XML document used by several
of our sample stylesheets.</p>
<question>
<text>When completed, the Eiffel Tower was the
tallest building in the world.</text>
<true correct="yes">You're correct! The Eiffel
Tower was the world's tallest building until 1930.</true>
<false>No, the Eiffel Tower was the world's tallest
building for over 30 years.</false>
</question>
<question>
<text>New York's Empire State Building knocked the
Eiffel Tower from its pedestal.</text>
<true>No, that's not correct.</true>
<false correct="yes">Correct! New York's Chrysler
Building, completed in 1930, became the world's tallest.</false>
</question>
</test>
Here's the stylesheet we'll import:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<body>
<xsl:for-each select="//text|//true|//false">
<p>
<xsl:apply-templates select="."/>
</p>
</xsl:for-each>
</body>
</html>
</xsl:template>
<xsl:template match="text">
<xsl:text>True or False: </xsl:text><xsl:value-of select="."/>
</xsl:template>
<xsl:template match="true|false">
<b><xsl:value-of select="name()"/>:</b>
<br/>
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
This template provides basic formatting for the <true> and <false> elements, as shown in Figure A-1. Document generated with basic formatting We'll illustrate <xsl:apply-imports> with this stylesheet, which imports the other stylesheet:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="imported.xsl"/>
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<head>
<title>A Brief Test</title>
<style>
<xsl:comment>
p.question {font-size: 125%; font-weight: bold}
p.right {color: green}
p.wrong {color: red}
</xsl:comment>
</style>
</head>
<body>
<h1>A Brief Test</h1>
<xsl:for-each select="//question">
<table border="1">
<xsl:apply-templates select="text"/>
<xsl:apply-templates select="true|false"/>
</table>
<br/>
</xsl:for-each>
</body>
</html>
</xsl:template>
<xsl:template match="text">
<tr bgcolor="lightslategray">
<td>
<p class="question">
<xsl:apply-imports/>
</p>
</td>
</tr>
</xsl:template>
<xsl:template match="true|false">
<tr>
<td>
<xsl:choose>
<xsl:when test="@correct='yes'">
<p class="right">
<xsl:apply-imports/>
</p>
</xsl:when>
<xsl:otherwise>
<p class="wrong">
<xsl:apply-imports/>
</p>
</xsl:otherwise>
</xsl:choose>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
Using <xsl:apply-imports> allows us to augment the behavior of the imported templates. Our new stylesheet produces this document:
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>A Brief Test</title>
<style>
<!--
p.question {font-size: 125%; font-weight: bold}
p.right {color: green}
p.wrong {color: red}
-->
</style>
</head>
<body>
<h1>A Brief Test</h1>
<table border="1">
<tr bgcolor="lightslategray">
<td>
<p class="question">True or False: When completed, the Eiffel
Tower was the tallest building in the world.</p>
</td>
</tr>
<tr>
<td>
<p class="right">
<b>true:</b>
<br>You're correct! The Eiffel Tower was the world's tallest
building until 1930.</p>
</td>
</tr>
<tr>
<td>
<p class="wrong">
<b>false:</b>
<br>No, the Eiffel Tower was the world's tallest building for
over 30 years.</p>
</td>
</tr>
</table>
<br>
<table border="1">
<tr bgcolor="lightslategray">
<td>
<p class="question">True or False: New York's Empire State Building
knocked the Eiffel Tower from its pedestal.</p>
</td>
</tr>
<tr>
<td>
<p class="wrong">
<b>true:</b>
<br>No, that's not correct.</p>
</td>
</tr>
<tr>
<td>
<p class="right">
<b>false:</b>
<br>Correct! New York's Chrysler Building, completed in 1930,
became the world's tallest.</p>
</td>
</tr>
</table>
<br>
</body>
</html>
When rendered, this stylesheet looks like Figure A-2. Document generated with <xsl:apply-imports> |
|