Стивен Холзнер - XSLT
- Название:XSLT
- Автор:
- Жанр:
- Издательство:Питер
- Год:2002
- Город:Санкт-Петербург
- ISBN:5-94723-271-5
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Холзнер - XSLT краткое содержание
Эта книга посвящена XSLT — мощным и удобным системам преобразования документов. В ней не только рассматривается весь синтаксис XSLT, от основ до специальных аспектов, но и подробно излагаются современные способы использования XSLT.
Вы найдете сотни практических примеров, таких как осуществление преобразований XSLT на web-cepвepax, подключение к базам данных и использование браузеров для осуществления преобразований на лету.
Книга рассчитана на всех, кто хочет изучать XSLT и использовать его на практике
XSLT - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
• disable-output-escaping
. Устанавливается в yes
для того, чтобы такие символы, как < и >, выводились буквально, а не как <
и >
. По умолчанию установлен в no
.
Этот элемент может содержать только текстовый узел.
Текстовые узлы создаются при помощи элемента , позволяющего по ходу дела замещать элементы целиком на текст. Одна из целей применения — сохранить символы-разделители, как в следующем примере (листинг 3.4), в котором элемент используется для вставки пробелов.
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The Planets Table
The Planets Table
Name | Mass | Radius | Day |
Новый результат виден на рис. 3.2, на котором между числовыми значениями и их единицами измерения вставлены пробелы.

Рис. 3.2.Вывод значений атрибутов, второй вариант
Как видите, элемент весьма удобен. Тем не менее вам следует знать вот что: по умолчанию элементы заменяют символы, которые могут входить в разметку, на эскейп-последовательности. Например, Here is а greater-than sign: >
будет выведено как «Here is a greater-than sign: >,», а не как «Herе is a greater-than sign: >». А если попытаться использовать < внутри элемента , процессор XSLT посчитает, что вы пытаетесь открыть элемент внутри элемента , что неверно. Как же вывести значащие символы, такие как < и >, если есть необходимость? Это можно сделать путем отключения вывода ESC-последовательностей (disabling output escaping).
УСОВЕРШЕНСТВОВАНИЯ В XSLT 2.0
Один из вопросов, которые призван решить XSLT 2.0, это упрощение импорта подобного текста без разбора из других файлов.
Отключение вывода эскейп-последовательностей
При помощи можно включать в выходной документ непосредственно символы < и &, а не последовательности <
и &
. Для этого следует установить атрибут disable-output-escaping
элемента в yes («да», по умолчанию он установлен в no
, «нет»). В приведенном ниже примере я при помощи непосредственно пишу текст " " в выходной документ:
version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Planets
Результат следующий:
Planets
Разумеется, не обязательно выводить при помощи : этот элемент можно было поместить непосредственно в элемент буквального результата. Но что делать в тех случаях, когда процессор XSLT не сможет распознать нужный нам в выходном документе элемент как фактический элемент? Например, в преобразованных документах XHTML вам потребуется , но процессор XSLT сочтет, что это не хорошо сформированный XML. Как поместить этот элемент в выходные данные?
Можно попробовать поместить этот элемент в раздел , как мы увидим в главе 6, и попытаться трактовать его как простые символьные данные, но процессоры XSLT все равно заменят < на <
, а > на >
.
Правильный способ добавить в вывод элемент — использовать атрибут doctype-public
элемента , как мы увидим в главе 6, но в качестве демонстрации для этих целей здесь я отключу вывод ESC-последовательностей в элементе (хотя этот способ не рекомендован для создания элементов ). Вот как это выглядит:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The Planets Table
The Planets Table
Name | Mass | Radius | Day |
А вот результат:
The Planets Table
The Planets Table
.
.
.
Далее в книге будут приведены другие примеры использования , в том числе — при обсуждении символов-разделителей далее в этой главе.
Написание значений атрибутов
В XSLT есть несколько способов написать значения атрибутов в выходные документы, и наиболее мощный — это создать атрибуты с нуля при помощи элемента , как мы увидим в главе 6.
Однако можно также во многих случаях использовать шаблоны значений атрибутов, с которыми мы познакомимся в этой главе.
Предположим, например, что нам требуется преобразовать текст в таких элементах, как , и , в атрибуты элементов , преобразуя planets.xml
в следующий вид:
MASS=".0553 (Earth = 1)" NAME="Mercury"/>
MASS=".815 (Earth = 1)" NAME="Venus"/>
MASS="1 (Earth = 1)" NAME="Earth"/>
Чтобы создать преобразование, нельзя просто использовать следующее выражение, в котором я взял значения элементов , и и попытался сделать их значениями атрибутов:
"
MASS=""
DAY=""
/>
Это не будет работать, поскольку нельзя использовать < внутри значений атрибутов, как я сделал в предыдущем примере. В XSLT для этого есть несколько способов. Один из них — использовать шаблоны значений атрибутов.
Шаблоны значений атрибутов
Шаблон имени значения атрибута не имеет ничего общего с теми шаблонами, с которыми мы до сих пор работали, — то есть с шаблонами для создания правил таблицы стилей. Напротив, применение шаблона значения атрибута (attribute value template) означает лишь, что значение атрибута может быть установлено во время выполнения.
В этом случае атрибут можно установить в значение выражения XPath (более подробно эта тема изучается в главе 4), если заключить выражение в фигурные скобки. Например, чтобы установить атрибут NAME
в строковое значение элемента , дочернего элемента контекстного узла, это значение можно присвоить следующим образом: NAME={DESCRIPTION}
.
В листинге 3.5 приведен правильный код XSLT, в котором значения элементов , , и присваиваются атрибутам элемента с теми же именами.
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Вот как это делается; посмотрите теперь на результирующий документ, в котором значения в различных элементах были преобразованы в атрибуты:
Предположим теперь, что нам также нужно включить все единицы измерения. Каждый элемент , и содержит атрибут UNITS
, задающий единицы измерения, и можно извлечь эти значения. Контекстным узлом является элемент , поскольку шаблон установлен для выбора этого элемента, поэтому на дочерние элементы , и можно ссылаться как " MASS
", " NAME
" и " RADIUS
". Для обращения к атрибуту UNITS
этих элементов можно использовать синтаксис " MASS/@UNITS
", " NAME/@UNITS
", и " RADIUS/@UNITS
":
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
MASS="{MASS} {MASS/@UNITS}"
RADIUS="{RADIUS} {RADIUS/@UNITS}"
DAY="{DAY} {DAY/@UNITS}"/>
И вот результат, включающий единицы измерения:
MASS=".0553 (Earth = 1)" NAME="Mercury"/>
MASS=".815 (Earth = 1)" NAME="Venus"/>
MASS="1 (Earth = 1)" NAME="Earth"/>
Заметьте, что в шаблонах значений атрибутов нельзя использовать вложенные фигурные скобки, и в выражении, использующем фигурные скобки, — таком как function printHello {cout << 'Hello';}
— фигурные скобки необходимо удваивать, для того чтобы процессор XSLT их игнорировал: function printHello {{cout<<'Hello';}}
.
Интервал:
Закладка: