определяет медиа-тип содержимого выходящего документа. Для HTML-документов значением
media-type
по умолчанию будет
"text/html"
.
Метод вывода "text"
XSLT позволяет выводить результат преобразования как простой текст. При использовании
method="text"
результирующее дерево приводится к строке, то есть в этом случае результатом преобразования
будет строковое сложение всех текстовых узлов дерева.
Пример
Входящий документ
<?xml version="1.0" encoding="utf-8"?>
<page>
<title>My heart's in the Highlands</title>
<content>My heart is not here</content>
</page>
одним и тем же шаблоном:
<xsl:template match="/page">
<poem title="{title}">
<xsl:value-of select="title"/>
<xsl:text>
</xsl:text>
<xsl:value-of select="content"/>
</poem>
</xsl:template>
при использовании метода вывода
"xml"
будет преобразован к виду
<?xml version="1.0" encoding="utf-8"?>
<poem title="My heart's in the Highlands">
My heart's in the Highlands
My heart is not here
</poem>
а при использовании метода
"text"
к виду
My heart's in the Highlands
My heart is not here
Атрибут encoding
Атрибут
encoding
указывает на предпочтительную кодировку вывода текста документа. Значение атрибута
encoding
по умолчанию зависит от программной платформы, на которой производится преобразование. В большинстве процессоров по умолчанию используются кодировки UTF-8, ASCII и ISO-8859-1.
В случае если кодировка, используемая для вывода текста, не отображает некоторые символы документа, процессор может выдать ошибку.
Атрибут media-type
По умолчанию в качестве значения атрибута
media-type
, используемого для простого текста, указывается
"text/plain"
. Значение атрибута
media-type
может быть использовано сервером, преобразующим документ в качестве MIME-типа.
Другие методы вывода
Как уже было сказано раньше, спецификация XSLT позволяет помимо основных методов
"xml"
,
"html"
и
"text"
использовать также и другие методы, реализация которых будет зависеть от производителя того или иного процессора. Кажется вполне логичной и закономерной возможность использования, к примеру, такого метода, как
"pdf"
для создания
документов в Adobe Portable Document Format (переносимом формате документов) или метода
"bin"
для создания двоичного потока данных. Однако, на данном этапе, процесс сериализации (создания физической сущности из логической модели) пока еще не определен в общем виде для произвольного метода. Возможно, в будущем, по аналогии с объектной моделью документа (DOM) будут созданы схожие интерфейсы для более легкого определения методов сериализации и интеграции преобразований в другие программы, но в настоящее время следует ограничиваться тремя основными методами.
Отметим также, что спецификация языка XSLT определяет функциональность элемента
xsl:output
как возможную, но не обязательную. Процессоры обязаны манипулировать логическими моделями XML-документов, но при этом они не обязаны поддерживать сериализацию и уметь выводить преобразованный XML-документ как последовательность байт. Конечно же, абсолютное большинство процессоров поддерживает такую возможность, но при всем том она остается не более чем возможностью.
Поэтому из соображений переносимости можно лишь только надеяться, что документ будет выведен так, как было задумано. Не следует исключать возможности, что в определённых условиях процессор не сможет контролировать процесс вывода документа.
Типичным примером такой ситуации может быть использование процессора совместно с другими компонентами, которые обмениваются с процессором документами в виде DOM-структур, но сами загружают и выводят документы. В этом примере компоненты, занимающиеся выводом преобразованного документа, могут спокойным образом игнорировать все то, что было указано в элементе
xsl:output
или в атрибутах
disable-output-escaping
других элементов преобразования. Более того, они даже не будут знать, что было там указано, поскольку эти значения не касаются процесса преобразования как такового — они относятся к выводу, контролировать который процессор в данном случае не может.
Отсюда следует однозначный вывод: не нужно чересчур злоупотреблять возможностями
xsl:output
и
disable-output-escaping
.
Замена специальных символов
Как мы уже знаем, в XML есть несколько специальных символов, которые, как правило, заменяются процессором при выводе документа на соответствующие символьные или встроенные сущности. К примеру, для того, чтобы вывод был корректным XML-документом, процессор обязан заменять символы "
<
" и "
&
" на встроенные (
<
и
&
) или символьные (
<
и
&
) сущности.
Между тем довольно часто бывает необходимым выводить в выходящем документе символы разметки.
Пример
Пусть входящий документ содержит описание товара, заданное в секции CDATA:
<?xml version="1.0" encoding="utf-8"?>
<product>
<title>An elephant</title>
<description><![CDATA[This is a <em>big</em> and <b>grey</b> animal!]]></description>