Элемент <xsl:apply-imports>

Элемент <xsl:apply-imports>

Если вы импортируете таблицу стилей с шаблоном, например, для элемента <PLANET>, и затем определите свой собственный элемент <PLANET>, импортируемая версия будет перекрыта. Как можно получить доступ к перекрытой версии? Этому служит элемент <xsl:apply-imports>.

В XSLT 1.0 у этого элемента нет атрибутов и нет содержимого. В рабочем проекте XSLT 1.1 элемент <xsl:apply-imports> может обрабатывать параметры, поэтому он может содержать ноль или более элементов <xsl:with-param> (подробнее о параметрах см. главу 9).

В качестве примера я модифицирую только что рассмотренный нами пример <xsl:import>. В этом случае я добавлю еще один столбец в генерируемую в этом примере (листинг 2.12) HTML-таблицу, названную DATA, путем перекрытия шаблона <PLANET> в rules.xsl новым шаблоном <PLANET> из planets.xsl. Новый шаблон просто добавляет в таблицу новый столбец и затем применяет старый шаблон <PLANET> к оставшимся данным. Доступ к старому шаблону осуществляется при помощи <xsl:apply-imports>.

Листинг 2.12. Использование <xsl:apply-imports>

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

 xmlns.xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:import href="rules.xsl"/>

 <xsl:template match="/PLANETS">

  <HTML>

   <HEAD>

    <TITLE>

     The Planets Table

    </TITLE>

   </HEAD>

   <BODY>

    <H1>

     The Planets Table

    </H1>

    <TABLE BORDER="2">

     <TR>

      <TD>Date</TD>

      <TD>Name</TD>

      <TD>Mass</TD>

      <TD>Radius</TD>

      <TD>Day</TD>

      <xsl:apply-templates/>

     </TR>

    </TABLE>

   </BODY>

  </HTML>

 </xsl:template>

 <xsl:template match="PLANET">

  <TR>

   <TD>4/1/2002</TD>

   <xsl:apply-imports/>

  </TR>

 </xsl:template>

</xsl:stylesheet>

А вот как выглядит новая версия rules.xsl (листинг 2.13).

Листинг 2.13. Новая версия rules.xsl

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:template match="PLANET">

  <TD><xsl:value-of select="NAME"/></TD>

  <TD><xsl:value-of select="MASS"/></TD>

  <TD><xsl:value-of select="RADIUS"/></TD>

  <TD><xsl:value-of select="DAY"/></TD>

 </xsl:template>

</xsl:stylesheet>

Результаты можно видеть на рис. 2.4. Я создал один шаблон при помощи другого, что является ближайшим аналогом в XSLT для наследования из объектно-ориентированной парадигмы.

Рис. 2.4. Использование <xsl:apply-imports>

В рабочем проекте XSLT 1.1 с элементом <xsl:apply-imports> можно использовать параметры таблицы стилей, что означает, что вы можете использовать элементы <xsl:with-param> в качестве содержимого <xsl:apply-imports>. Подробное обсуждение параметров и элемента <xsl:with-param> приводится в главе 9.