Шрифт:
<TD>3716 miles</TD>
<TD>116.75 days</TD>
</TR>
<TR>
<TD><B>Earth</B></TD>
<TD><B>1 (Earth = 1)</B></TD>
<TD><B>2107 miles</B></TD>
<TD><B>1 days</B></TD>
</TR>
</TABLE>
</BODY>
</HTML>
Этот документ показан на рис. 6.4.
Рис. 6.4. Применение режимов обработки
Режимы также очень удобны в том случае, когда требуется обработать один и тот же документ более одного раза; классический пример — создание оглавления.
Следующий пример демонстрирует создание оглавления. Я добавил в
planets.xml
оглавление в элементе <TOC>
(table of contents, оглавление), имеющем три элемента <ENTRY>
для каждой из планет. Заметьте, что здесь мне необходимо применить два шаблона, выбирающие элементы <PLANET>
, — один для создания оглавления и еще один для копирования всех элементов <PLANET>
в результирующий документ — я использую режимы для того, чтобы их различать. Начну с установки режима в «toc
» и применения шаблона, который поддерживает этот режим и создает оглавление: <?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http//www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<xsl:template match="PLANETS">
<PLANETS>
<TOC>
<xsl:apply-templates mode="toc"/>
</TOC>
.
.
.
</PLANETS>
</xsl:template>
<xsl:template match="PLANET" mode="toc">
<ENTRY>
<xsl:value-of select="NAME"/>
</ENTRY>
</xsl:template>
.
.
.
Затем я применяю общий шаблон без каких-либо режимов обработки ко всем элементам и атрибутам, копируя их в результирующий документ (листинг 6.14).
Листинг 6.14. Создание оглавления
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<xsl:template match="PLANETS">
<PLANETS>
<TOC>
<xsl:apply-templates mode="toc"/>
</TOC>
<xsl:apply-templates select="@*|node"/>
</PLANETS>
</xsl:template>
<xsl:template match="PLANET" mode="toc">
<ENTRY>
<xsl:value-of select="NAME"/>
</ENTRY>
</xsl:template>
<xsl:template match="@*|node">
<xsl:copy>
<xsl:apply-templates select="@*|node"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
И, наконец, результат, выводящий
planets.xml
с оглавлением: <?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xml" href="#"?>
<PLANETS>
<TOC>
<ENTRY>Mercury</ENTRY>
<ENTRY>Venus</ENTRY>
<ENTRY>Earth</ENTRY>
</TOC>