Книга: XSLT

Правила по умолчанию в шаблоне

Правила по умолчанию в шаблоне

Взгляните на следующую таблицу стилей XSLT — в ней заданы правила для выбора корневого узла, узлов <PLANETS> и узлов <PLANET>:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
 xmlns:xsl="http.//www.w3.org/1999/XSL/Transform">
 <xsl:template match="/">
  <HTML>
   <xsl:apply-templates/>
  </HTML>
 </xsl:template>
 <xsl:template match="PLANETS">
  <xsl:apply-templates/>
 </xsl:template>
 <xsl:template match="PLANET">
  <P>
   <xsl:value-of select="NAME"/>
  </P>
 </xsl:template>
</xsl:stylesheet>

Обратите внимание на правило для элемента <PLANETS>: в нем просто используется элемент <xsl:apply-templates> для применения шаблонов ко всем дочерним узлам. Однако при обработке шаблона существует правило по умолчанию: если для элемента не задано правило, автоматически вызывается <apply-templates/>. Таким образом, следующая таблица стилей, в которой опущено правило для <PLANETS>, делает в точности то же, что и предыдущая:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="/">
  <HTML>
   <xsl:apply-templates/>
  </HTML>
 </xsl:template>
 <xsl:template match="PLANET">
  <P>
   <xsl:value-of select="NAME"/>
  </P>
 </xsl:template>
</xsl:stylesheet>

В этом случае я воспользовался преимуществом правил по умолчанию для шаблона. Ниже приведены правила для каждого вида узлов, которые будут применены, если не задать правило для узла явно:

• Корневой узел. По умолчанию вызывается <xsl:apply-templates/>;

• Узлы элементов. По умолчанию вызывается <xsl:apply-templates/>;

• Узлы атрибутов. Копирует в результирующий документ значение атрибута, однако копирует его как текст, но не как атрибут;

• Текстовые узлы. Копирует в результирующий документ текст;

• Узлы комментариев. Нет обработки XSLT, ничего не копируется;

• Узлы инструкций обработки. Нет обработки XSLT, ничего не копируется;

• Узлы пространств имен. Нет обработки XSLT, ничего не копируется.

Наиболее важное правило по умолчанию применяется к элементам и может быть выражено следующим образом:

<xsl:template match="*">
 <xsl:apply-templates/>
</xsl:template>

Это правило приведено здесь только для гарантии того, что каждый элемент, от корня и ниже, будет обрабатываться при помощи <xsl:apply-templates/>, если не предоставить другого правила, которое перекроет правило по умолчанию.

Правило по умолчанию для текстовых узлов можно выразить следующим образом: функция XSLT text выбирает текст узла, так что текст текстового узла добавляется в выходной документ:

<xsl:template match="text()">
 <xsl:value-of select="."/>
</xsl:template>

Правило по умолчанию того же вида применяется к атрибутам, которые добавляются в выходной документ при помощи следующего правила, где выражение "@*" выбирает любой атрибут:

<xsl:template match="@*">
 <xsl:value-of select="."/>
</xsl:template>

По умолчанию инструкции обработки не вставляются в выходной документ, поэтому их правило по умолчанию можно выразить просто при помощи следующей функции-инструкции обработки XSLT, которая выбирает инструкции обработки (как мы увидим в главе 8):

<xsl:template match="processing-instruction()"/>

То же верно для комментариев — их правило по умолчанию может быть выражено при помощи функции XSLT comment, которая также будет рассмотрена в главе 8:

<xsl:template match="comment()"/>

Подведем итоги рассмотрения правил по умолчанию: если вообще не задать никаких правил, все разбираемые символьные данные входного документа будут вставлены в выходной документ. Вот как выглядит таблица стилей, в которой не задано никаких явных правил:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
</xsl:stylesheet>

А вот результат применения этой таблицы стилей к planets.xml. Заметьте, что правило по умолчанию для атрибутов не применялось, потому что они не являются дочерними по отношению к другим узлам:

<?xml version="1.0" encoding="UTF-8"?>
Mercury
.0553
58.65
1516
.983
43.4
Venus
.815
116.75
3716
.943
66.8
Earth
1
1
2107
1
128.4

ПРАВИЛА ПО УМОЛЧАНИЮ И INTERNET EXPLORER

Одна из проблем при работе с XSLT в Internet Explorer 5.5 или младше состоит в том, что браузер не предоставляет никаких правил по умолчанию. Необходимо задавать все правила самостоятельно, если только не установлен процессор MSXML3 в режиме замены (подробнее см. главу 2) или вы не обновили браузер до Internet Explorer 6.0.

Кроме того, узлы-разделители исходного документа сохраняются, поэтому можно считать, что следующее правило также является правилом по умолчанию: <xsl:output preserve-space="*"/>.

Оглавление книги


Генерация: 1.330. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз