Вход/Регистрация
Технология XSLT
вернуться

Валиков Алексей Н.

Шрифт:

Представим себе входящий документ в кодировке 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/>

 </B>

 <C>

<B/>

 </C>

</A>

Следует быть осторожными при использовании

indent="yes"
там, где в содержимом документа могут встречаться значащие пробелы. Индентация позволяет процессору при выводе документа добавлять пробельные символы по собственному усмотрению. В случаях, когда при последующей обработке преобразованного документа пробельные символы могут быть восприняты неадекватно, лучше индентацию не использовать.

Атрибут cdata-section-elements
  • Читать дальше
  • 1
  • ...
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: