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

/xsl:template>





Новый результат виден на рис. 3.2, на котором между числовыми значениями и их единицами измерения вставлены пробелы.

Рис. 3.2. Вывод значений атрибутов, второй вариант 


Как видите, элемент

весьма удобен. Тем не менее вам следует знать вот что: по умолчанию элементы
заменяют символы, которые могут входить в разметку, на эскейп-последовательности. Например,
Here is а greater-than sign: >
будет выведено как «Here is a greater-than sign: >,», а не как «Herе is a greater-than sign: >». А если попытаться использовать < внутри элемента
, процессор XSLT посчитает, что вы пытаетесь открыть элемент внутри элемента
, что неверно. Как же вывести значащие символы, такие как < и >, если есть необходимость? Это можно сделать путем отключения вывода ESC-последовательностей (disabling output escaping).

УСОВЕРШЕНСТВОВАНИЯ В XSLT 2.0

Один из вопросов, которые призван решить XSLT 2.0, это упрощение импорта подобного текста без разбора из других файлов.

Отключение вывода эскейп-последовательностей

При помощи

можно включать в выходной документ непосредственно символы < и &, а не последовательности
<
и
&
. Для этого следует установить атрибут
disable-output-escaping
элемента
в yes («да», по умолчанию он установлен в
no
, «нет»). В приведенном ниже примере я при помощи
непосредственно пишу текст "
" в выходной документ:

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

</code></pre></p><p><pre><code>     Planets</code></pre></p><p><pre><code>


<PLANET/>

Результат следующий:

</code></pre></p><p><pre><code>   Planets</code></pre></p><p><pre><code>

Разумеется, не обязательно выводить

при помощи
: этот элемент можно было поместить непосредственно в элемент буквального результата. Но что делать в тех случаях, когда процессор XSLT не сможет распознать нужный нам в выходном документе элемент как фактический элемент? Например, в преобразованных документах XHTML вам потребуется
, но процессор XSLT сочтет, что это не хорошо сформированный XML. Как поместить этот элемент в выходные данные?

Можно попробовать поместить этот элемент в раздел

, как мы увидим в главе 6, и попытаться трактовать его как простые символьные данные, но процессоры XSLT все равно заменят < на
<
, а > на
>
.

Правильный способ добавить в вывод элемент

— использовать атрибут
doctype-public
элемента
, как мы увидим в главе 6, но в качестве демонстрации для этих целей здесь я отключу вывод ESC-последовательностей в элементе
(хотя этот способ не рекомендован для создания элементов
). Вот как это выглядит:

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">

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

     The Planets Table

NameMassRadiusDay