Предположим, что в преобразовании версия выходящего документа задана как 1.2:

<xsl:output method='xml' version='1.2'/>

Тогда процессор может вывести декларацию XML в следующем виде:

<?xml version='1.2' encoding='utf-8'?>

Значением атрибута version по умолчанию является '1.0', то есть, для того, чтобы получить декларацию XML вида

<?xml version='1.0' и т. д. ?>

достаточно опустить определение атрибута version:

<xsl:output method='xml'/>

Атрибут encoding

Атрибут encoding указывает на то, какая кодировка предпочтительна для выходящего документа. Множество кодировок зависит от используемого процессора, но при этом в соответствии с технической рекомендацией все они обязаны поддерживать Unicode-формы кодировок UTF-8 и UTF-16.

В случае если процессор не поддерживает кодировку, указанную в атрибуте encoding, процессор может либо выдать ошибку, либо использовать UTF-8 или UTF-16.

Если атрибут encoding опущен, процессор должен по умолчанию использовать UTF-8 или UTF-16. На практике абсолютное большинство процессоров используют по умолчанию кодировку UTF- 8.

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

Пример

Представим себе входящий документ в кодировке UTF-8, содержащий символ кириллицы 'Э' с Unicode-кодом #x42d (или #1069 в десятичной системе счисления):

<?xml version='1.0' encoding='utf-8'?>

<page>Э</page>

Если преобразование будет использовать для вывода кодировку, которая не может отображать символы кириллического алфавита, например ISO-8859-1, то символ 'Э' в выходящем документе должен быть заменен символьной сущностью.

Листинг 8.36. Преобразование

<xsl:stylesheet

 version='1.0'

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

 <xsl:output

  method='xml'

  encoding='ISO-8859-1'

  indent='yes'/>

 <xsl:template match='/'>

  <xsl:copy-of select='/page'/>

 </xsl:template>

</xsl:stylesheet>

Листинг 8.37. Выходящий документ

<?xml version='1.0' encoding='ISO-8859-1'?>

<page>&#1069;</page>

Вместе с тем синтаксис XML не разрешает использовать символьные сущности в именах элементов и атрибутов, и наличие в них символов, не отображаемых кодировкой вывода, будет являться ошибкой. Если в предыдущем примере документ будет иметь вид

<?xml version='1.0' encoding='utf-8'?>

<страница>Э</страница>

то вывести результирующее дерево в кодировке ISO-8859-1 будет невозможно.

Атрибут indent

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

<A><В><С/></В><С><В></В></С></А>

или

<A>

 <B>

  <C/>

 </B>

 <C>

  <B>

  </B>

 </C>

</A>

Очевидно, что второй случай гораздо легче для понимания, поскольку в нем легко можно видеть принадлежность элементов одного другому. Подобное форматирование можно использовать и при выводе преобразованного документа при помощи атрибута indent элемента xsl:output. Если этот атрибут имеет значение 'yes', процессор может добавить один или несколько пробельных символов или символов перевода строки — в зависимости от реализации. Как правило, каждый дочерний элемент помещают на новой строке, добавляя впереди два пробела на каждый уровень вложенности.

Пример Листинг 8.38. Входящий документ

<?xml version='1.0' encoding='utf-8'?>

<A><B><C/></B><C><B></В></C></A>

Листинг 8.39. Преобразование

<xsl:stylesheet

 version='1.0'

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

 <xsl:output indent='yes'/>

 <xsl:template match='/'>

  <xsl:copy-of select='/'/>

 </xsl:template>

</xsl:stylesheet>

Листинг 8.40. Выходящий документ

<?xml version='1.0' encoding='utf-8'?>

<A>

 <B>

  <C/>

Вы читаете Технология XSLT
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату