Spec-Zone.ru › XSLT & XPath

Параметры PI

Обзор

XSLT поддерживает передачу параметров в стилевое оформление при его выполнении. Это возможно уже некоторое время при использовании XSLTProcessor в JavaScript. Однако при использовании инструкции обработки (PI) <?xml-stylesheet?> не было способа предоставить параметры.

Для решения этой проблемы в Firefox 2 (подробнее см. Поддерживаемые версии) реализованы две новые инструкции обработки <?xslt-param?> и <?xslt-param-namespace?>. Обе инструкции могут содержать «псевдоатрибуты» так же, как и инструкция xml-stylesheet.

В этом документе передаются два параметра «цвет» и «размер» в стилевое оформление «style.xsl».

<?xslt-param name="color" value="blue"?>
<?xslt-param name="size" select="2"?>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>

Обратите внимание, что эти инструкции не имеют никакого эффекта при преобразовании с использованием объекта XSLTProcessor в JavaScript.

Инструкции обработки

Атрибуты в инструкциях xslt-param и xslt-param-namespace анализируются по правилам, определённым в xml-stylesheet. Любые нераспознанные атрибуты должны игнорироваться. Анализ любого атрибута не должен завершаться ошибкой из-за наличия нераспознанного атрибута, если этот атрибут соответствует синтаксису в xml-stylesheet.

Обе инструкции xslt-param и xslt-param-namespace должны появляться в прологе документа, то есть до первой метки элемента. Все инструкции в прологе должны выполняться, как те, которые встречаются до, так и те, которые встречаются после любой инструкции xml-stylesheet.

Если имеется несколько инструкций xml-stylesheet , параметры применяются ко всем стилевым оформлениям, так как все стилевые оформления импортируются в одно стилевое оформление в соответствии со спецификацией XSLT. Примечание: несколько инструкций XSLT xml-stylesheet в настоящее время не поддерживаются в Firefox.

xslt-param

Инструкция xslt-param поддерживает 4 атрибута:

name

Локальная часть имени параметра. Проверка синтаксиса атрибута не выполняется, однако, если это не допустимое NCName, то он никогда не будет соответствовать ни одному параметру в стилевом оформлении.

namespace

Пространство имён имени параметра. Проверка синтаксиса атрибута не выполняется.

value

Содержит строковое значение для параметра. Значение атрибута используется как значение параметра. Тип данных всегда строка.

select

Выражение XPath для параметра. Значение атрибута анализируется как выражение XPath. Результат вычисления выражения используется как значение параметра.

Если атрибут name отсутствует или пустой, инструкция игнорируется.

Если атрибут namespace отсутствует или пустой, используется пространство имён null.

Не является ошибкой указать имя параметра, которого нет в стилевом оформлении (или который является переменной в стилевом оформлении). Инструкция игнорируется.

Если присутствуют оба атрибута value и select, или если не присутствует ни value, ни select, инструкция игнорируется.

Обратите внимание, что value="..." не строго равно select="'...'", поскольку значение может содержать как апострофы, так и кавычки.

Примеры

Установите параметр 'цвет' со строковым значением 'красный':

<?xslt-param name="color" value="red"?>

Установите параметр 'columns' со значением 2:

<?xslt-param name="columns" select="2"?>

Установите параметр 'books' в набор узлов, содержащий все элементы <book> в пространстве имён null:

<?xslt-param name="books" select="//book"?>

Установите параметр 'show-toc' в булево значение true:

<?xslt-param name="show-toc" select="true()"?>
Контекст атрибута select

Для анализа и вычисления выражения в атрибуте select используется следующий контекст:

  • Узел контекста — это узел, используемый в качестве начального текущего узла при выполнении стилевого оформления.
  • Позиция контекста — это позиция узла контекста в начальном списке текущих узлов, используемом при выполнении стилевого оформления.
  • Размер контекста — это размер начального списка текущих узлов, используемого при выполнении стилевого оформления.
  • Переменные недоступны.
  • Библиотека функций — стандартная библиотека функций XPath.
  • Объявления пространств имён определяются инструкциями xslt-param-namespace, см. ниже.

Если атрибут select не удаётся проанализировать или выполнить, инструкция игнорируется (в частности, он не возвращается к атрибуту value).

xslt-param-namespace

Инструкция xslt-param-namespace использует два атрибута:

prefix

Префикс, который сопоставляется.

namespace

Пространство имён, которому сопоставляется префикс.

Инструкция xslt-param-namespace влияет на выражение в атрибуте select для всех инструкций xslt-param , следующих за инструкцией. Это относится даже в том случае, если между инструкциями xslt-param-namespace и xslt-param есть другие узлы, такие как комментарии или другие инструкции.

Не является ошибкой, если несколько инструкций используют один и тот же префикс, каждая новая инструкция просто изменяет, к какому пространству имён сопоставляется префикс.

Если prefix отсутствует, пустой или равен недопустимому NCName, инструкция игнорируется.

Если namespace отсутствует, инструкция игнорируется. Если namespace пустое, отображение префикса удаляется.

Примеры

Установите параметр 'books' в набор узлов, содержащий все элементы <book> в пространстве имён 'http://www.example.org/myNamespace' :

<?xslt-param-namespace prefix="my" namespace="http://www.example.org/myNamespace"?>
<?xslt-param name="books" select="//my:book"?>

Поддерживаемые версии

Поддерживается начиная с Firefox 2.0.0.1. Атрибут value поддерживается в Firefox 2, но атрибут select приводит к сбою для некоторых выражений в релизе 2.0.

Возможные будущие разработки

Должны ли мы разрешить любые функции XSLT в выражении? document() кажется полезным, но, похоже, сложно сохранить инвариант, что generate-id() должно производить одну и ту же строку для одного и того же документа.

А как насчёт запроса параметров URL в стилевом оформлении XSLT? Например, передача их в определённые <xsl:param>.

© 2005–2022 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/XSLT/PI_Parameters

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API