XSLT — страница 49 из 124

Элементы расширения — это элементы, добавленные в XSLT пользователем или производителем. В рабочем проекте XSLT 1.1 для элементов расширения был установлен ряд правил, и в XSLT 2.0 предполагается более широкая их поддержка. 

В рабочем проекте XSLT 1.1 правила определяли, что элементами расширения должны быть определенные пользователем или производителем элементы, не являющиеся элементами верхнего уровня. Они должны принадлежать к пространству имен, которое было определено как пространство имен расширений.

Для определения пространства имен расширений применяется атрибут

extension-element-prefixes
в элементе
, или атрибут
xsl:extension-element-prefixes
в элементе буквального результата или элементе расширения.

Ниже приведен пример. Xalan позволяет вам создать несколько выходных документов при помощи своего элемента расширения

. Для того чтобы применить этот элемент, я могу добавить в
planets.xml
элементу документа атрибут
file
, задав имя файла, в который будет отправлен вывод, как
redirected.xml
:

Mercury

.0553

58.65

1516

.983

43.4

 .

 .

 .

Теперь в таблице стилей XSLT, которую я назвал

redirect.xsl
, я определяю пространство имен «
redirect
» так, чтобы оно соответствовало классу Java, который поддерживает ее в Xalan:
org.apache.xalan.lib.Redirect
. Я также устанавливаю атрибут
extension-element-prefixes
элемента
в значение пространства имен «
redirect
»:

 version="1.0"

 xmlns:lxslt=http://xml.apache.org/xslt"

 xmlns:redirect="org.apache.xalan.lib.Redirect"

 extension-element-prefixes="redirect">

 .

 .

 .

В этот момент мне ничто не мешает применить элемент расширения

для записи вывода в новый файл (в отличие от указанного в командной строке). Например, для того, чтобы отправить в другой файл отформатированное содержимое элемента
, я могу получить имя создаваемого файла из атрибута
file
элемента
и записать данные в этот новый файл:

 version="1.0"

 xmlns:lxslt="http://xml.apache.org/xslt"

 xmlns:redirect="org.apache.xalan.lib.Redirect"

 extension-element-prefixes="redirect">





Операция завершена; вот как это может выглядеть при использовании Xalan в Windows:

C:planets>java org.apache.xalan.xslt.Process -IN planets.xml -XSL redirect.xsl -OUT new.xml

При этом будет создан файл

redirected.xml
, который выглядит следующим образом:

Mercury

.0553

58.65

1516

.983

43.4

Venus

.815

116.75

3716

.943

66.8

 .

 .

 .

Применение функции element-available

Для проверки доступности элемента служит функция XSLT 1.0

element-available
. В следующем примере я проверяю наличие элемента с названием
:

Sorry, can't do math today.

Есть еще один способ обработать случай отсутствия элемента расширения — элемент

.

Элемент