Элемент <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>
.
<?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).
<?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.
Преобразование документов XML при помощи Internet Explorer
В нашем обзоре таблиц стилей есть еще одна тема для обсуждения: как использовать таблицы стилей в Internet Explorer. Как мы видели в главе 1, для считывания документов XML и XSL можно использовать JavaScript, и осуществлять преобразование при помощи разборщика MSXML3. (Дополнительная информация по этой теме приведена в главе 10. Документацию по Internet Explorer можно также прочитать по адресу http://msdn.microsoft.com/xml/XSLGuide/.)
Однако, если вам нужно открыть XML-документ непосредственно в Internet Explorer при навигации (например, набрав URI в адресной строке), в использовании элементов <?xml-stylesheet? >
и <xsl:stylesheet>
вы полагаетесь на браузер, а это означает, что для IE версии 5.5 и более ранних необходимо провести ряд изменений.
INTERNET EXPLORER 6.0 И ПОЛУЧЕНИЕ И УСТАНОВКА РАЗБОРЩИКА MSXML
Обратите внимание: IE 6.0 только что вышел, когда книга готовилась к печати, и он поддерживает полный синтаксис XSLT (за исключением того, что вы все еще должны использовать тип «text/xsl» для таблиц стилей, как в <?xml-stylesheet type='text/xsl' href='planets.xsl'?>, вместо «text/xml»). Если вы используете IE 5.5 или более ранних версий, вы также можете загрузить и установить последнюю версию разборщика MSXML прямо от Microsoft вместо предыдущей версии, используемой Internet Explorer. Если это сделать, вам не нужно будет проводить изменения, перечисленные в этом разделе. Дополнительную информацию можно получить по адресу http://msdn.microsoft.com/ xml/general/xmlparser.asp. Загрузить разборщик сейчас можно по адресу http://msdn.microsoft.com/downloads/default.asp?URL=/code/sample.asp?