Выбрать главу

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