Стивен Холзнер - XSLT
- Название:XSLT
- Автор:
- Жанр:
- Издательство:Питер
- Год:2002
- Город:Санкт-Петербург
- ISBN:5-94723-271-5
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Холзнер - XSLT краткое содержание
Эта книга посвящена XSLT — мощным и удобным системам преобразования документов. В ней не только рассматривается весь синтаксис XSLT, от основ до специальных аспектов, но и подробно излагаются современные способы использования XSLT.
Вы найдете сотни практических примеров, таких как осуществление преобразований XSLT на web-cepвepax, подключение к базам данных и использование браузеров для осуществления преобразований на лету.
Книга рассчитана на всех, кто хочет изучать XSLT и использовать его на практике
XSLT - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
• implements-prefix
(необязательный). Задает имя пространства имен функции расширения, которую реализует этот элемент. Принимает значение NCNAME
;
• language
(необязательный). Задает язык, используемый функцией расширения. Устанавливается в « ecmascript
» (стандарт JavaScript), « javascript
», « java
» или QNAME, не являющееся NCNAME;
• src
(необязательный). Предоставляет URI, в котором реализована функция расширения. Например, это может быть класс Java;
• archive
(необязательный). Задает архивы, которые необходимо загрузить перед запуском функции расширения, если они есть. Принимает значения списка URI, разделенного символами-разделителями.
Элемент содержит символьные данные (Microsoft использует раздел CDATA
), реализующие функцию или функции расширения.
Как теперь связать функцию, определенную в элементе , с вашей таблицей стилей XSLT? Сначала создайте в своей таблице стилей элемент как элемент верхнего уровня, затем поместите в него функции, которые вы хотите определить. В приведенном ниже примере я определяю две функции JavaScript, makeMoney
(сделать деньги) и makeMoreMoney
(сделать еще больше денег), в элементе , реализующем пространство имен расширений « starpowder
»:
function makeMoney(e) {
.
.
.
}
function makeMoreMoney(e) {
.
.
.
}
В зависимости от вашего процессора XSLT, может оказаться хорошим решением заключить такого рода сценарии в раздел CDATA:
function makeMoney(e) {
.
.
.
}
function makeMoreMoney(e) {
.
.
.
}
]]>
Теперь при помощи пространства имен « starpowder
» можно указать, что вызывается функция расширения:
Вот и все (если ваш процессор XSLT это поддерживает). Если вместо сценария вы хотите указать класс Java, воспользуйтесь атрибутом src
:
РАБОТА С ВНЕШНИМИ РЕСУРСАМИ
Атрибут src также используется, если есть архив подпрограмм JavaScript, как, например, src="archives.js".
Из всех известных мне процессоров XSLT элемент реализует только процессор Microsoft MSXML3. Информация о работе со сценариями для написания функций расширения для Internet Explorer приведена на web-узле Microsoft (в данный момент это страница по адресу http://msdn.microsoft.com/xml/xslguide/script-overview.asp, но, кажется, Microsoft меняет структуру web-узла каждые два дня или около того).
Следующий пример демонстрирует работу с Internet Explorer. Я создал функцию JavaScript для преобразования данных о радиусе планет из planets.xml
, приведенных в милях, в километры и последующем выводе этих данных в километрах.
Как обсуждалось в главе 2 в разделе «Преобразование документов XML при помощи Internet. Explorer», для просмотра XML-документа, использующего таблицу стилей XSL, в Internet Explorer, версии 5.5 и младше в документ необходимо внести некоторые изменения (если только вы не установили последний разборщик MSXML или не используете недавно появившуюся версию браузера 6.0, хотя и в этом случае нужно применять « text/xsl
»). Для начала в таблице стилей XSL используйте тип MIME « text/xsl
», а не « text/xml
». Я также задал URI для таблицы стилей « kilometers.хsl
» следующим образом (листинг 5.15).
Mercury .0553
58.65
1516
.983
43.4
Venus
.815
116.75
3716
.943
66.8
.
.
.
Для преобразования таблицы стилей kilometers.xsl
для работы в IE 5.5 или младше я воспользовался пространством имен XSL, которое использует IE, и добавил элемент , показав, что я собираюсь писать сценарии на JavaScript. Заметьте, однако, что элемент в Internet Explorer не поддерживает атрибут префикса реализации, поэтому я не могу связать функции, определенные в пространстве имен:
.
.
.
.
.
.
В соответствии с требованиями Internet Explorer, код должен быть заключен в раздел CDATA. Здесь я определил функцию milesToKilometers
, которая принимает узел, читает текст узла в свойстве text
и преобразует текст в число миль при помощи функции JavaScript parseInt
. Далее я умножаю число миль на 1,6, чтобы получить километры, и возвращаю результат:
function milesToKilometers(e) {
miles = parseInt(e.text);
return miles * 1.6;
}
]]>
.
.
.
Поскольку пока в Internet Explorer нельзя связать пространство имен с функцией расширения, для их вызова используется специальный элемент Microsoft . Ниже показано, как это выглядит в таблице стилей kilometers.xsl
, где я передаю в функцию milesToKilometers
текущий узел для преобразования миль в километры. Поскольку IE 5.5 и младше не поддерживают правила по умолчанию (хотя версия 6.0, вышедшая одновременно с подписанием этой книги в печать, поддерживает их, и вам не нужно ничего менять), для этих браузеров я предоставил правило для корневого узла (листинг 5.16).
function milesToKilometers(e) {
miles = parseInt(e.text);
return miles * 1.6;
}
]]>
The Planets Table
The Planets Table
Name | Mass | Radius | Day |
milesToKilometers(this)
Вот и все, результат этого преобразования приведен на рис. 5.4.

Рис. 5.4.Применение функции расширения в Internet Explorer
Со временем производители будут поставлять все больше и больше функций расширения. Как можно определить, доступна ли заданная функция расширения? Для этого служит функция function-available
.
Применение функции function-available
Функция XSLT 1.0 function-available
служит для проверки доступности функции. В следующем примере я хочу воспользоваться функцией расширения starpowder:calculate
для математических вычислений, а если она недоступна, я отправляю в результирующий документ текст «Sorry, can't do math today.» (Извините, сегодня математические вычисления не работают.), хотя можно, конечно, прекратить обработку и вывести сообщение об ошибке при помощи элемента :
Sorry, can't do math today.
Внешние объекты
В рабочем проекте XSLT 1.1 для поддержки функций расширения появился новый тип данных — внешний объект (external object). Переменной XSLT, о которой пойдет речь в главе 9, может быть присвоен внешний объект — так же, как и один из четырех типов данных XPath, поддерживаемых в XSLT (строка, число, логическое значение, набор узлов). Внешний объект представляет объект, который создается внешним языком программирования, возвращается функцией расширения и не может быть преобразован в один из четырех типов данных XPath. Тип данных « external object
» был добавлен в XSLT для того, чтобы предоставить вам безопасную «оболочку» для таких данных. Пока еще никто не реализовал поддержку внешних объектов, но это ожидается в скором времени.
Интервал:
Закладка: