<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> |