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