Чтение онлайн

ЖАНРЫ

Холзнер Стивен

Шрифт:

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

 <PLANET>

<NAME>Mercury</NAME>

<MASS UNITS="(Earth = 1)">.0553</MASS>

<DAY UNITS="days">58.65</DAY>

<RADIUS UNITS="miles">1516</RADIUS>

<DENSITY UNITS="(Earth = 1)">.983</DENSITY>

<DISTANCE UNITS="million miles">43.4</DISTANCE><!--В перигелии->

 </PLANET>

 .

 .

 .

</PLANETS>

В этой главе мы рассмотрели большую часть базового материала, и в следующей главе я собираюсь уделить внимание созданию полных выражений XPath. Хотя вы уже немного знакомы с этой темой по обсуждению образцов выбора в главе 4, нам осталось еще рассмотреть весьма значительную часть.

Глава 7 

Работа с XPath

В главе 4 было объяснено, как создавать образцы выбора, которые можно использовать в атрибуте

match
таких элементов, как
<xsl:template>
. Образцы являются подмножеством полного языка XPath, и в этой главе будет рассмотрена полная версия XPath.

Выражения XPath применимы в XSLT не только в образцах выбора, но и во многих других приложениях: в атрибуте

select
элементов
<xsl:apply-templates>
,
<xsl:value-of>
,
<xsl:for-each>
,
<xsl:param>
,
<xsl:variable>
,
<xsl:with-param>
,
<xsl:copy-of>
и
<xsl:sort>
, в шаблонах значений атрибутов, в атрибуте
test
элементов
<xsl:if>
и
<xsl:when>
, атрибуте
value
элемента
<xsl:number>
и в предикатах образцов выбора. На этот счет не может быть никаких сомнений: пока вы не знаете XPath, вы не знаете XSLT, и вся эта глава посвящена созданию выражений XPath и работе с ними.

Фактически мы работали с выражениями XPath начиная с главы 1, в которой мы впервые познакомились с атрибутом

select
в элементах
<xsl:apply-templates>
и
<xsl:value-of>
:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

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

 <xsl:template match="/PLANETS">

<HTML>

<HEAD>

Поделиться с друзьями: