Чтение онлайн

на главную - закладки

Жанры

Технология XSLT

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

Шрифт:

<редкий>

<xsl:apply-templates/>

</редкий>

 </xsl:template>

 <xsl:template match="охотник">

<рыболов>

<xsl:apply-templates/>

</рыболов>

 </xsl:template>

 <xsl:template match="желает/знать">

<может>

<забыть>

<xsl:apply-templates/>

</забыть>

</может>

 </xsl:template>

 <xsl:template match="где">

<как>

<xsl:apply-templates/>

</как>

 </xsl:template>

 <xsl:template match="сидит">

<плавает>

<xsl:apply-templates/>

</плавает>

 </xsl:template>

 <xsl:template match="фазан">

<щука>

<xsl:apply-templates/>

</щука>

 </xsl:template>

</xsl:stylesheet>

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

<?xml version="1.0" encoding="windows-1251"?>

<редкий>

 <рыболов>

<может>

<забыть>

<как>

<плавает>

<щука/>

</плавает>

</как>

</забыть>

</может>

 </рыболов>

</редкий>

Напомним, что кодировка выходящего документа определяется атрибутом

encoding
элемента
xsl:output
и не зависит от кодировок преобразования и обрабатываемых документов. Например, можно легко создать преобразование, которое будет изменять кодировку входящего документа. Это будет идентичное преобразование с элементом
xsl:output
, определяющим целевой набор символов.

Листинг 8.60. Преобразование, изменяющее кодировку документа на KOI8-R

<xsl:stylesheet version="1.0"

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

 <xsl:output encoding="KOI8-R"/>

 <xsl:template match="@*|node">

<xsl:copy>

<xsl:apply-templates select="@*|node"/>

</xsl:copy>

 </xsl:template>

</xsl:stylesheet>

Как

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

Практически во всех процессорах поддерживаются кодировки UTF-8, US- ASCII и ISO-8859-1, но далеко не все могут работать с Windows-1251 или KOI8-R. Поэтому, создавая документы и преобразования в нестандартных кодировках, мы заведомо ограничиваем переносимость решений. В случаях, когда XML/XSLT приложения создаются под конкретный процессор с заведомо известными возможностями, это не является большой проблемой, однако в тех случаях, когда требуется универсальность или точно не известно, каким процессором будет производиться обработка, единственным выходом будет использовать UTF-8 — как во входящих документах, так и в самих преобразованиях.

Случай нескольких входящих документов

Базовая архитектура преобразования подразумевает один входящий документ. Несмотря на это, в преобразованиях можно использовать и обрабатывать информацию, хранящуюся в других, внешних документах. Доступ к этим документам можно получить при помощи функции

document
.

Функция document

Запись функции:

node-set document(object, node-set?)

Функция

document
позволяет обращаться к внешним документам по их URI, например

<xsl:copy-of select="document('http://www.w3.org')"/>

скопирует в выходящий документ содержимое главной страницы Консорциума W3.

Функция

document
возвращает множество узлов. В простейшем случае это множество будет состоять из корневого узла внешнего документа. Функцию
document
можно использовать в более сложных XPath-выражениях, например в выражениях фильтрации. Так функция

<xsl:copy-of select="document('http://www.w3.org')/html/body/a"/>

скопирует все элементы а, находящиеся в теле (

/html/body
) внешнего документа.

Базовый сценарий использования функции

document
очень прост: ей передается строка, содержащая URI внешнего ресурса, а результатом является множество узлов, состоящее из корня внешнего документа. Однако на этом возможности
document
не заканчиваются. Мы рассмотрим несколько вариантов вызова функции
document
с параметрами различного типа.

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

Потомок бога 3

Решетов Евгений Валерьевич
3. Локки
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Потомок бога 3

Графиня из захудалого рода

Шах Ольга
Фантастика:
фэнтези
5.50
рейтинг книги
Графиня из захудалого рода

Кодекс Охотника. Книга XIV

Винокуров Юрий
14. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XIV

Убивать чтобы жить 6

Бор Жорж
6. УЧЖ
Фантастика:
боевая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 6

Гримуар темного лорда III

Грехов Тимофей
3. Гримуар темного лорда
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Гримуар темного лорда III

Мастер 7

Чащин Валерий
7. Мастер
Фантастика:
фэнтези
боевая фантастика
попаданцы
технофэнтези
аниме
5.00
рейтинг книги
Мастер 7

Страж Кодекса. Книга IV

Романов Илья Николаевич
4. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса. Книга IV

Попала, или Кто кого

Юнина Наталья
Любовные романы:
современные любовные романы
5.88
рейтинг книги
Попала, или Кто кого

Черный дембель. Часть 1

Федин Андрей Анатольевич
1. Черный дембель
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Черный дембель. Часть 1

Вперед в прошлое 6

Ратманов Денис
6. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 6

Неудержимый. Книга XXVI

Боярский Андрей
26. Неудержимый
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Неудержимый. Книга XXVI

Черный Маг Императора 7 (CИ)

Герда Александр
7. Черный маг императора
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Черный Маг Императора 7 (CИ)

Надуй щеки! Том 2

Вишневский Сергей Викторович
2. Чеболь за партой
Фантастика:
попаданцы
дорама
фантастика: прочее
5.00
рейтинг книги
Надуй щеки! Том 2

Кодекс Охотника. Книга XXIX

Винокуров Юрий
29. Кодекс Охотника
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XXIX