Как видите, в XSLT обработке символов-разделителей приходится уделять достаточное внимание, но процедура упрощается, если вы знаете, что происходит.
ВЫРАВНИВАНИЕ ДОКУМЕНТОВ В ЭТОЙ КНИГЕ
Способ выравнивания документов зависит от конкретного процессора XSLT. В этой книге документы выровнены для удобочитаемости, даже если в действительности документы не были выровнены процессором XSLT.
Правила по умолчанию в шаблоне
Взгляните на следующую таблицу стилей XSLT — в ней заданы правила для выбора корневого узла, узлов <PLANETS> и узлов <PLANET>:
<?xml version="1.0"?>
<xsclass="underline" stylesheet version="1.0"
xmlns:xsl="http.//www.w3.org/1999/XSL/Transform">
<xsclass="underline" template match="/">
<HTML>
<xsclass="underline" apply-templates/>
</HTML>
</xsclass="underline" template>
<xsclass="underline" template match="PLANETS">
<xsclass="underline" apply-templates/>
</xsclass="underline" template>
<xsclass="underline" template match="PLANET">
<P>
<xsclass="underline" value-of select="NAME"/>
</P>
</xsclass="underline" template>
</xsclass="underline" stylesheet>
Обратите внимание на правило для элемента <PLANETS>: в нем просто используется элемент <xsclass="underline" apply-templates> для применения шаблонов ко всем дочерним узлам. Однако при обработке шаблона существует правило по умолчанию: если для элемента не задано правило, автоматически вызывается <apply-templates/>. Таким образом, следующая таблица стилей, в которой опущено правило для <PLANETS>, делает в точности то же, что и предыдущая:
<?xml version="1.0"?>
<xsclass="underline" stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsclass="underline" template match="/">
<HTML>
<xsclass="underline" apply-templates/>
</HTML>
</xsclass="underline" template>
<xsclass="underline" template match="PLANET">
<P>
<xsclass="underline" value-of select="NAME"/>
</P>
</xsclass="underline" template>
</xsclass="underline" stylesheet>
В этом случае я воспользовался преимуществом правил по умолчанию для шаблона. Ниже приведены правила для каждого вида узлов, которые будут применены, если не задать правило для узла явно:
• Корневой узел. По умолчанию вызывается <xsclass="underline" apply-templates/>;
• Узлы элементов. По умолчанию вызывается <xsclass="underline" apply-templates/>;
• Узлы атрибутов. Копирует в результирующий документ значение атрибута, однако копирует его как текст, но не как атрибут;
• Текстовые узлы. Копирует в результирующий документ текст;
• Узлы комментариев. Нет обработки XSLT, ничего не копируется;
• Узлы инструкций обработки. Нет обработки XSLT, ничего не копируется;
• Узлы пространств имен. Нет обработки XSLT, ничего не копируется.
Наиболее важное правило по умолчанию применяется к элементам и может быть выражено следующим образом:
<xsclass="underline" template match="*">
<xsclass="underline" apply-templates/>
</xsclass="underline" template>
Это правило приведено здесь только для гарантии того, что каждый элемент, от корня и ниже, будет обрабатываться при помощи <xsclass="underline" apply-templates/>, если не предоставить другого правила, которое перекроет правило по умолчанию.
Правило по умолчанию для текстовых узлов можно выразить следующим образом: функция XSLT text выбирает текст узла, так что текст текстового узла добавляется в выходной документ:
<xsclass="underline" template match="text()">
<xsclass="underline" value-of select="."/>
</xsclass="underline" template>
Правило по умолчанию того же вида применяется к атрибутам, которые добавляются в выходной документ при помощи следующего правила, где выражение "@*" выбирает любой атрибут:
<xsclass="underline" template match="@*">
<xsclass="underline" value-of select="."/>
</xsclass="underline" template>
По умолчанию инструкции обработки не вставляются в выходной документ, поэтому их правило по умолчанию можно выразить просто при помощи следующей функции-инструкции обработки XSLT, которая выбирает инструкции обработки (как мы увидим в главе 8):
<xsclass="underline" template match="processing-instruction()"/>
То же верно для комментариев — их правило по умолчанию может быть выражено при помощи функции XSLT comment, которая также будет рассмотрена в главе 8:
<xsclass="underline" template match="comment()"/>
Подведем итоги рассмотрения правил по умолчанию: если вообще не задать никаких правил, все разбираемые символьные данные входного документа будут вставлены в выходной документ. Вот как выглядит таблица стилей, в которой не задано никаких явных правил:
<?xml version="1.0"?>
<xsclass="underline" stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
</xsclass="underline" 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