Перейти к содержанию

xsl:evaluate

Позволяет динамически оценивать выражения XPath, построенные в виде строки.

Доступно в XSLT 3.0. Начиная с Saxon 9.8, доступен во всех редакциях, но ограниченно используется в Saxon-HE. Реализовано в Saxon-PE и Saxon-EE начиная с Saxon 9.6.

  • Категория: инструкция
  • Содержимое: ( xsl:with-param | xsl:fallback )*
  • Допустимые родительские элементы: любой элемент XSLT, модель содержимого которого - sequence-constructor; любой литеральный элемент результата

Атрибуты

xpath
expression
Выражение XPath, которое оценивается для возврата целевого выражения в виде строки.
as?
sequence-type
Определяет требуемый тип результата выражения XPath. По умолчанию это item()*.
base-uri?
{ uri }
Базовый URI для целевого выражения. По умолчанию - базовый URI инструкции таблицы стилей.
with-params?
expression
Карта, используемая для предоставления значений переменным в целевом выражении, если имена известны только динамически.
context-item?
expression
Выражение XPath, которое оценивается для определения элемента контекста, позиции и размера для оценки целевого выражения.
namespace-context?
expression
Выражение, возвращающее узел; пространства имен в области видимости этого узла определяют контекст пространства имен для выражения XPath. По умолчанию используется контекст пространства имен инструкции xsl:evaluate в таблице стилей.
schema-aware?
{ boolean }
Если да, то выражение XPath имеет доступ к компонентам схемы, импортированным в таблицу стилей.
saxon:options?
expression
Может использоваться для установки опций, специфичных для реализации Saxon. Значением атрибута является выражение, которое оценивается как карта. Подробнее см. в saxon:options.

Заметки по реализации Saxon

Инструкция была реализована начиная с версии Saxon 9.3, первоначально с ограничением, что функции, доступные только в XSLT, такие как key(), не могут быть использованы в целевом выражении XPath. Инструкция полностью реализована начиная с версии Saxon 9.6. Переключатель для отключения этой функции (требуемый спецификацией W3C) стал доступен в Saxon 9.8. Атрибут saxon:options стал доступен в Saxon 9.9.

Инструкция распознается в Saxon-HE, но функция "статически отключена", что означает, что при фактическом выполнении инструкции произойдет ошибка.

Если вас беспокоят последствия этой функции для безопасности, вы можете отключить ее статически или динамически, установив свойство конфигурации Feature.DISABLE_XSL_EVALUATE.

Подробности

Инструкция xsl:evaluate позволяет динамически оценивать выражения XPath так же, как и функция расширения saxon:evaluate(), которая была доступна в Saxon в течение многих лет.

Функция доступна в виде инструкции XSLT, а не функции, чтобы обеспечить большую гибкость синтаксиса, в частности, возможность определения параметров с помощью дочерних элементов xsl:with-param.

Инструкция может принимать xsl:fallback для определения поведения отката при использовании процессора XSLT 2.0 (или 1.0).

Прежде чем использовать xsl:evaluate, подумайте, не могут ли функции более высокого порядка (также новые в XSLT 3.0) обеспечить лучшее решение проблемы. Также хорошо подумайте о возможности инъекционных атак, если оцениваемое выражение формируется путем конкатенации строк.

Примеры

Сортировка элементов продукта в соответствии с ключом сортировки, предоставленным (в виде выражения XPath) в качестве параметра таблицы стилей:

1
2
3
4
5
<xsl:apply-templates select="product">
    <xsl:sort>
        <xsl:evaluate xpath="$product-sort-key"/>
    </xsl:sort>
</xsl:apply-templates>

Ссылки

См. также

Комментарии