Алексей Валиков - Технология XSLT
- Название:Технология XSLT
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2002
- Город:Санкт-Петербург
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Алексей Валиков - Технология XSLT краткое содержание
Книга посвящена разработке приложений для преобразования XML-документов с использованием XSLT — расширяемого языка стилей для преобразований. Обсуждается применение языков XSLT и XPath в решении практических задач: выводу документов в формате HTML, использованию различных кодировок для интернационализации и, в частности, русификации приложений, вопросам эффективности существующих подходов для решения проблем преобразования. Для иллюстрации материала используется большое количество примеров.
Для начинающих и профессиональных программистов
Технология XSLT - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Отсюда следует однозначный вывод: не нужно чересчур злоупотреблять возможностями xsl:output
и disable-output-escaping
.
Замена специальных символов
Как мы уже знаем, в XML есть несколько специальных символов, которые, как правило, заменяются процессором при выводе документа на соответствующие символьные или встроенные сущности. К примеру, для того, чтобы вывод был корректным XML-документом, процессор обязан заменять символы " <
" и " &
" на встроенные ( <
и &
) или символьные ( <
и &
) сущности.
Между тем довольно часто бывает необходимым выводить в выходящем документе символы разметки.
Пусть входящий документ содержит описание товара, заданное в секции CDATA:
big and grey animal!]]>
Если мы будем преобразовывать этот документ с использованием шаблона
то в выходящем документе специальные символы будут заменены:
An elephant
This is a big and grey animal!
Для того чтобы избежать замены, можно воспользоваться атрибутом disable-output-escaping
(отменить замену символов) элементов xsl:value-of
и xsl:text. Этот атрибут может принимать значения "yes"
и "no"
("no" — значение по умолчанию). Значение "yes"
означает, что процессор при выводе текста, создаваемого xsl:text
или xsl:value-of
не должен заменять специальные символы. Если бы в предыдущем примере мы использовали преобразование.
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
то на выходе мы бы получили документ
An elephant
This is a big and grey animal!
Атрибут disable-output-escaping
налагает ряд ограничений на использование текстовых узлов, генерируемых элементами xsl:text
и xsl:value-of
: эти узлы не могут входить в качестве текстового содержимого в узлы атрибутов, комментариев или инструкций по обработке. Кроме того, дерево, содержащее текстовые узлы, для которых была отменена замена специальных символов, не может быть приведено к строке или числу. И в том и в другом случае процессор может либо выдать ошибку преобразования, либо проигнорировать отмену замены специальных символов.
Атрибут disable-output-escaping
имеет также и более концептуальное ограничение. Процессор сможет отменить замену символов только в том случае, когда он сам будет контролировать процесс вывода. Как мы уже обсуждали в предыдущем разделе, ситуации, когда процесс вывода не будет выполняться самим процессором, не такая уж и редкость. Поэтому следует использовать disable-output-escaping
только в тех случаях, когда другой альтернативы нет или когда имеется полная уверенность, что этот метод будет работать.
Атрибут disable-output-escaping
работает с методами вывода "xml"
и "html"
, но не оказывает никакого влияния на метод "text"
, поскольку при этом методе все специальные символы и так выводятся без замены.
Кодировки в XSLT-преобразованиях
Несмотря на то, что в логических деревьях, которыми манипулирует XSLT, текстовые узлы представляются в кодировке Unicode, очень часто в обрабатываемых документах бывает необходимо использовать также другие кодировки. К примеру, большинство русскоязычных документов хранятся в кодировках UTF-8 и KOI8-R.
Если внимательно присмотреться к преобразованиям, можно заметить, что, как правило, в них участвуют минимум три документа — входящий (преобразовываемый) документ, документ преобразования (преобразующий) и выходящий (преобразованный документ). Соответственно, каждый из них может иметь собственную кодировку.
Кодировка входящего документа указывается в его xml-декларации. Например, документы в кодировке UTF-8 должны иметь xml-декларацию вида
Возможно, небольшим сюрпризом окажется то, что в соответствии со стандартом XML, имена тегов вовсе не обязаны состоять исключительно из латинских букв. В имени элемента можно использовать весь кириллический алфавит, а также множество других символов. Совершенно корректным будет документ
<���страница>
<���содержимое/>
</страница>
Аналогичным образом кириллицу, а также другие наборы символов и алфавиты можно использовать и в самих преобразованиях, поскольку те в свою очередь также являются XML-документами.
<���каждый>
<���охотник>
<���желает>
<���знать>
<���где>
<���сидит>
<���фазан/>
</сидит>
</где>
</знать>
</желает>
</охотник>
</каждый>
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<���редкий>
</редкий>
<���рыболов>
</рыболов>
<���может>
<���забыть>
</забыть>
</может>
<���как>
</как>
<���плавает>
</плавает>
<���щука>
</щука>
<���редкий>
<���рыболов>
<���может>
<���забыть>
<���как>
<���плавает>
<���щука/>
</плавает>
</как>
</забыть>
</может>
</рыболов>
</редкий>
Напомним, что кодировка выходящего документа определяется атрибутом encoding
элемента xsl:output
и не зависит от кодировок преобразования и обрабатываемых документов. Например, можно легко создать преобразование, которое будет изменять кодировку входящего документа. Это будет идентичное преобразование с элементом xsl:output
, определяющим целевой набор символов.
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Как можно видеть, XSLT довольно гибко поддерживает кодировки — входящие и выходящие документы, а также сами преобразования могут иметь разные наборы символов. Единственным ограничением является множество кодировок, поддерживаемое самим процессором, вернее парсером, который он использует для разбора входящих документов, и сериализатором, который служит для создания физического экземпляра выходящего документа.
Практически во всех процессорах поддерживаются кодировки UTF-8, US- ASCII и ISO-8859-1, но далеко не все могут работать с UTF-8 или KOI8-R. Поэтому, создавая документы и преобразования в нестандартных кодировках, мы заведомо ограничиваем переносимость решений. В случаях, когда XML/XSLT приложения создаются под конкретный процессор с заведомо известными возможностями, это не является большой проблемой, однако в тех случаях, когда требуется универсальность или точно не известно, каким процессором будет производиться обработка, единственным выходом будет использовать UTF-8 — как во входящих документах, так и в самих преобразованиях.
Читать дальшеИнтервал:
Закладка: