<xsclass="underline" apply-templates/>
</TABLE>
</BODY>
</HTML>
</xsclass="underline" template>
<xsclass="underline" template match="PLANET">
<xsclass="underline" if test="NAME='Earth'">
<TR>
<TD><xsclass="underline" apply-templates select="NAME" mode="fancy"/></TD>
<TD><xsclass="underline" apply-templates select="MASS" mode="fancy"/></TD>
<TD><xsclass="underline" apply-templates select="RADIUS" mode="fancy"/></TD>
<TD><xsclass="underline" apply-templates select="DAY" mode="fancy"/></TD>
</TR>
</xsclass="underline" if>
<xsclass="underline" if test=NAME!='Earth'">
<TR>
<TD><xsclass="underline" apply-templates select="NAME"/></TD>
<TD><xsclass="underline" apply-templates select="MASS"/></TD>
<TD><xsclass="underline" apply-templates select="RADIUS"/></TD>
<TD><xsclass="underline" apply-templates select="DAY"/></TD>
</TR>
</xsclass="underline" if>
</xsclass="underline" template>
<xsclass="underline" template match="NAME">
<xsclass="underline" value-of select="."/>
</xsclass="underline" template>
<xsclass="underline" template match="MASS">
<xsclass="underline" value-of select="."/>
<xsclass="underline" text> </xsclass="underline" text>
<xsclass="underline" value-of select="@UNITS"/>
</xsclass="underline" template>
<xsclass="underline" template match="RADIUS">
<xsclass="underline" value-of select="."/>
<xsclass="underline" text> </xsclass="underline" text>
<xsclass="underline" value-of select="@UNITS"/>
</xsclass="underline" template>
<xsclass="underline" template match="DAY">
<xsclass="underline" value-of select="."/>
<xsclass="underline" text> </xsclass="underline" text>
<xsclass="underline" value-of select=@UNITS"/>
</xsclass="underline" template>
<xsclass="underline" template match="NAME" mode="fancy">
<B><xsclass="underline" value-of select="."/></B>
</xsclass="underline" template>
<xsclass="underline" template match="MASS" mode="fancy">
<B>
<xsclass="underline" value-of select="."/>
<xsclass="underline" text> </xsclass="underline" text>
<xsclass="underline" value-of select="@UNITS"/>
</B>
</xsclass="underline" template>
<xsclass="underline" template match="RADIUS" mode="fancy">
<B>
<xsclass="underline" value-of select="."/>
<xsclass="underline" text> </xsclass="underline" text>
<xsclass="underline" value-of select="@UNITS"/>
</B>
</xsclass="underline" template>
<xsclass="underline" template match="DAY" mode="fancy">
<B>
<xsclass="underline" value-of select="."/>
<xsclass="underline" text> </xsclass="underline" text>
<xsclass="underline" value-of select="@UNITS"/>
</B>
</xsclass="underline" template>
</xsclass="underline" stylesheet>
Вот результат. Заметьте, что одни только данные Земли выделены полужирным:
<HTML>
<HEAD>
<TITLE>
The Fancy Planets Table
</TITLE>
</HEAD>
<BODY>
<H1>
The Fancy Planets Table
</Н1>
<TABLE BORDER="2">
<TR>
<TD>Name</TD>
<TD>Mass</TD>
<TD>Radius</TD>
<TD>Day</TD>
</TR>
<TR>
<TD>Mercury</TD>
<TD>.0553 (Earth = 1)</TD>
<TD>1516 miles</TD>
<TD>58.65 days</TD>
</TR>
<TR>
<TD>Venus</TD>
<TD>.815 (Earth = 1)</TD>
<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"?>
<xsclass="underline" stylesheet version="1.0"
xmlns:xsl="http//www.w3.org/1999/XSL/Transform">
<xsclass="underline" output method="xml"/>
<xsclass="underline" template match="PLANETS">
<PLANETS>
<TOC>
<xsclass="underline" apply-templates mode="toc"/>
</TOC>
.
.
.
</PLANETS>
</xsclass="underline" template>
<xsclass="underline" template match="PLANET" mode="toc">
<ENTRY>
<xsclass="underline" value-of select="NAME"/>
</ENTRY>
</xsclass="underline" template>
.
.
.
Затем я применяю общий шаблон без каких-либо режимов обработки ко всем элементам и атрибутам, копируя их в результирующий документ (листинг 6.14).
Листинг 6.14. Создание оглавления<?xml version="1.0"?>
<xsclass="underline" stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsclass="underline" output method="xml"/>
<xsclass="underline" template match="PLANETS">
<PLANETS>
<TOC>
<xsclass="underline" apply-templates mode="toc"/>
</TOC>
<xsclass="underline" apply-templates select="@*|node()"/>
</PLANETS>
</xsclass="underline" template>
<xsclass="underline" template match="PLANET" mode="toc">
<ENTRY>
<xsclass="underline" value-of select="NAME"/>
</ENTRY>
</xsclass="underline" template>
<xsclass="underline" template match="@*|node()">
<xsclass="underline" copy>
<xsclass="underline" apply-templates select="@*|node()"/>
</xsclass="underline" copy>
</xsclass="underline" template>
</xsclass="underline" stylesheet>