Вот результирующий документ, полученный после применения этой таблицы стилей к planets.xml
. Обратите внимание на то, что убраны все символы-разделители, в том числе все символы новой строки:
Mercury.055358.651516.98343.4Venus.815116.753716.94366.8Earth1121071128.4
Заметьте, что таким образом удаляются только чистые узлы-разделители. Например, текст элемента не содержит чистых текстовых узлов-разделителей, поэтому текст «Volcanoes for Dinner» будет сохранен в выходном документе вместе с пробелами. Так будет даже тогда, когда текст будет содержать несколько пробелов подряд, как в «Volcanoes for Dinner».
В некоторых ситуациях может потребоваться не удалять все узлы-разделители из всего документа; задать элементы, в которых следует сохранить узлы-разделители, можно при помощи элемента . У этого элемента такой же атрибут, что и у :
• elements
(обязательный). Задает элементы, в которых нужно сохранить символы-разделители. Представляет собой список разделенных символами-разделителями NameTest
(именами или обобщенными именами с символами подстановок).
Фактически элемент является элементом по умолчанию для всех элементов в XSLT. Если вы использовали элемент , все равно можно указать, в каком элементе или элементах нужно сохранить узлы-разделители, установив атрибут elements
элемента в список этих элементов:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Обсужденные средства удаления и сохранения разделителей могут показаться слишком сложными для форматирования выходных документов выравнивающими пробелами, но, к счастью, существует простой способ: атрибут indent
элемента позволяет автоматически выровнять выходной документ.
Автоматическое выравнивание
Элемент поддерживает атрибут indent
который устанавливается в «yes» или «no», и указывает процессору XSLT, нужно ли выравнивать результирующий документ. Как правило, выравнивание результирующего документа не имеет большого значения, поскольку с ним работает приложение, которому все равно, выровнен документ или нет, как мы видели в примерах преобразований XML- XML и XML-HTML. Однако иногда требуется представить результирующий документ в виде простого текста, и в таких случаях выравнивание документа для отображения иерархической структуры может оказаться удобным.
Способ работы процессора XSLT с переменной выравнивания не регламентируется W3C и зависит от процессора, поэтому для получения требуемого результата нужно экспериментировать. Пусть, например, у нас есть версия planets.xml
без какого-либо выравнивания:
Mercury
.0553
58.65
1516
.983
43.4
Venus
.815
116.75
3716
.943
66.8
Earth
1
1
2107
1
128.4
При помощи элемента можно указать процессору XSLT осуществлять выравнивание документа при преобразовании его в HTML (листинг 3.6).
Листинг 3.6. Таблица стилей, задающая выравнивание
The Planets Table
The Planets Table
Name |
Mass |
Radius |
Day>/TD> |
|
|
|
|
Результат применения таблицы с использованием процессора Saxon (в котором особенно хорошо реализовано выравнивание) с требуемым выравниванием:
The Planets Table
The Planets Table
Name |
Mass |
Radius |
Day |
Mercury |
.0553 |
1516 |
58.65 |
Venus |
.815 |
3716 |
116.75 |
Earth |
1 |
2107 |
1 |
Как видите, в XSLT обработке символов-разделителей приходится уделять достаточное внимание, но процедура упрощается, если вы знаете, что происходит.
ВЫРАВНИВАНИЕ ДОКУМЕНТОВ В ЭТОЙ КНИГЕ
Способ выравнивания документов зависит от конкретного процессора XSLT. В этой книге документы выровнены для удобочитаемости, даже если в действительности документы не были выровнены процессором XSLT.
Правила по умолчанию в шаблоне
Взгляните на следующую таблицу стилей XSLT — в ней заданы правила для выбора корневого узла, узлов и узлов :
xmlns:xsl="http.//www.w3.org/1999/XSL/Transform">
Обратите внимание на правило для элемента : в нем просто используется элемент для применения шаблонов ко всем дочерним узлам. Однако при обработке шаблона существует правило по умолчанию: если для элемента не задано правило, автоматически вызывается . Таким образом, следующая таблица стилей, в которой опущено правило для , делает в точности то же, что и предыдущая:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Читать дальше