XSLT — страница 55 из 124

>

Venus.815116.753716.94366.8

Earth1121071128.4

Пропуск объявления XML и создание фрагментов XML

При знакомстве с XSLT многих смущает объявление XML, которое всегда появляется наверху их результирующих документов, особенно если они не отдают себе отчёт в том, что методом вывода по умолчанию является XML. Разумеется, существует способ избавиться от объявления XML, что может быть полезно при создании хорошо сформированных фрагментов XML, не обязательно являющихся законченными документами. Достаточно только установить атрибут

omit-xml-declaration
элемента в «yes»:
.

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

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

Эта таблица стилей преобразует

planets.xml
:

Mercury

.0553

58.65

1516

.983

43.4

Venus

.815

116.75

3716

.943

66.8

 .

 .

 .

в новую версию без объявления XML:

Mercury

.0553

58.65

1516

.983

43.4

Venus

.815

116.75

3716

.943

66.8

 .

 .

 .

Полезно знать об этом при создании фрагментов XML или выполнении другой работы. Тем не менее, заметим, что во всех законченных документах XML — даже написанных самостоятельно при помощи разнообразных приложений XML, таких как WML — в начале обязательно должно быть объявление XML.

Создание уникальных идентификаторов при помощи generate-id

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

generate-id
.

В следующем примере я добавляю составленное из гиперссылок оглавление в

planets.html
. Для создания оглавления я прохожу в цикле по всем планетам при помощи элемента
. На каждом шаге цикла я создаю гиперссылку и при помощи шаблона значений атрибута создаю атрибут
HREF
, который устанавливается в уникальный идентификатор для рассматриваемой планеты. Заметьте, что, несмотря на свое имя, функция
generate-id
создает только строковый идентификатор элемента, она не создает атрибуты ID:

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

</code></pre></p><p><pre><code>     The Planets Table</code></pre></p><p><pre><code>

     The Planets Table

    .

    .

    .

Эта таблица стилей (листинг 6.12) генерирует для каждой планеты идентификатор и создает требуемые гиперссылки. Функция

generate-id
не только создает для элемента новый идентификатор, но и возвращает его при последующем применении
generate-id
к этому элементу. В данном случае это удобно, поскольку таким образом я могу создать закладки гиперссылки в HTML-таблице данных планет, установить по очереди атрибут
закладки в идентификатор для каждого элемента
 — так, чтобы он стал гиперссылкой-назначением.

Листинг 6.12. Применение функции generate-id

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

</code></pre></p><p><pre><code>     The Planets Table</code></pre></p><p><pre><code>

     The Planets Table

<