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

на главную

Жанры

Холзнер Стивен

Шрифт:

• 

archive
(необязательный). Задает архивы, которые необходимо загрузить перед запуском функции расширения, если они есть. Принимает значения списка URI, разделенного символами-разделителями.

Элемент содержит символьные данные (Microsoft использует раздел

CDATA
), реализующие функцию или функции расширения.

Как теперь связать функцию, определенную в элементе

<xsl:script>
, с вашей таблицей стилей XSLT? Сначала создайте в своей таблице стилей элемент
<xsl:script>
как элемент верхнего уровня, затем поместите в него функции, которые вы хотите определить. В приведенном ниже примере я определяю две функции JavaScript,
makeMoney
(сделать
деньги) и
makeMoreMoney
(сделать еще больше денег), в элементе
<xsl:script>
, реализующем пространство имен расширений «
starpowder
»:

<xsl:script implements prefix="starpowder" language="javascript">

function makeMoney(e) {

 .

 .

 .

}

function makeMoreMoney(e) {

 .

 .

 .

}

</xsl:script>

В зависимости от вашего процессора XSLT, может оказаться хорошим решением заключить такого рода сценарии в раздел CDATA:

<xsl:script implements-prefix="starpowder" language="javascript">

 <![CDATA[

function makeMoney(e) {

.

.

.

}

function makeMoreMoney(e) {

.

.

.

}

 ]]>

</xsl:script>

Теперь при помощи пространства имен «

starpowder
» можно указать, что вызывается функция расширения:

<CASH>

 <xsl:value-of select="starpowder:makeMoney(1000000)"/>

</CASH>

Вот и все (если ваш процессор XSLT это поддерживает). Если вместо сценария вы хотите указать класс Java, воспользуйтесь атрибутом

src
:

<xsl:script implements-prefix="starpowder" src="java:com.MakeMoney" language="java">

</xsl:script>
 

РАБОТА С ВНЕШНИМИ РЕСУРСАМИ

Атрибут src также используется, если есть архив подпрограмм JavaScript, как, например, src="archives.js".

Из всех известных мне процессоров XSLT элемент

<xsl:script>
реализует только процессор Microsoft MSXML3. Информация о работе со сценариями для написания функций расширения для Internet Explorer приведена на web-узле Microsoft (в данный момент это страница по адресуно, кажется, Microsoft меняет структуру web-узла каждые два дня или около того).

Следующий пример демонстрирует работу

<xsl:script>
с 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).

Листинг 5.15. Установка использования kilometers.xsl для planets.xml в Internet Explorer

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="#"?>

<PLANETS>

 <PLANET>

<NAME>Mercury</NAME> <MASS UNITS="(Earth = 1)">.0553</MASS>

<DAY UNITS="days">58.65</DAY>

<RADIUS UNITS="miles">1516</RADIUS>

<DENSITY UNITS="(Earth = 1)">.983</DENSITY>

<DISTANCE UNITS="million miles">43.4</DISTANCE><!--В перигелии-->

 </PLANET>

 <PLANET>

<NAME>Venus</NAME>

<MASS UNITS="(Earth = 1)">.815</MASS>

<DAY UNITS="days">116.75</DAY>

<RADIUS UNITS="miles">3716</RADIUS>

<DENSITY UNITS="(Earth = 1)">.943</DENSITY>

<DISTANCE UNITS="million miles">66.8</DISTANCE><!--B перигелии-->

 </PLANET>

 .

 .

 .

Для преобразования таблицы стилей

kilometers.xsl
для работы в IE 5.5 или младше я воспользовался пространством имен XSL, которое использует IE, и добавил элемент
<xsl:script>
, показав, что я собираюсь писать сценарии на JavaScript. Заметьте, однако, что элемент
<xsl:script>
в Internet Explorer не поддерживает атрибут префикса реализации, поэтому я не могу связать функции, определенные в пространстве имен:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

 <xsl:script language="javascript">

.

.

.

 </xsl:script>

 .

 .

 .

В соответствии с требованиями Internet Explorer, код должен быть заключен в раздел CDATA. Здесь я определил функцию

milesToKilometers
, которая принимает узел, читает текст узла в свойстве
text
и преобразует текст в число миль при помощи функции JavaScript
parseInt
. Далее я умножаю число миль на 1,6, чтобы получить километры, и возвращаю результат:

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

Отмороженный 8.0

Гарцевич Евгений Александрович
8. Отмороженный
Фантастика:
постапокалипсис
рпг
аниме
5.00
рейтинг книги
Отмороженный 8.0

Скрываясь в тени

Мазуров Дмитрий
2. Теневой путь
Фантастика:
боевая фантастика
7.84
рейтинг книги
Скрываясь в тени

На границе тучи ходят хмуро...

Кулаков Алексей Иванович
1. Александр Агренев
Фантастика:
альтернативная история
9.28
рейтинг книги
На границе тучи ходят хмуро...

Восход. Солнцев. Книга I

Скабер Артемий
1. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга I

Заставь меня остановиться 2

Юнина Наталья
2. Заставь меня остановиться
Любовные романы:
современные любовные романы
6.29
рейтинг книги
Заставь меня остановиться 2

Системный Нуб 4

Тактарин Ринат
4. Ловец душ
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Системный Нуб 4

Машенька и опер Медведев

Рам Янка
1. Накосячившие опера
Любовные романы:
современные любовные романы
6.40
рейтинг книги
Машенька и опер Медведев

Мастер 2

Чащин Валерий
2. Мастер
Фантастика:
фэнтези
городское фэнтези
попаданцы
технофэнтези
4.50
рейтинг книги
Мастер 2

Титан империи 5

Артемов Александр Александрович
5. Титан Империи
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Титан империи 5

Мятежник

Прокофьев Роман Юрьевич
4. Стеллар
Фантастика:
боевая фантастика
7.39
рейтинг книги
Мятежник

Последний рейд

Сай Ярослав
5. Медорфенов
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Последний рейд

Идеальный мир для Лекаря 9

Сапфир Олег
9. Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
6.00
рейтинг книги
Идеальный мир для Лекаря 9

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

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

Младший сын князя

Ткачев Андрей Сергеевич
1. Аналитик
Фантастика:
фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Младший сын князя