Переменная в xsl: шаблон соответствия шаблону - PullRequest
8 голосов
/ 12 января 2012

С учетом

Таблица стилей XSLT с глобальной переменной:

<xsl:variable name="lang" select="/response/str[@name='lang']"/>

Вопрос

Откуда исходит ограничение, что использование переменных в предикатах некорректно в шаблоне сопоставления xsl:template, но допустимо в xsl:apply-templates шаблоне выбора?

<!-- throws compilation error, at least in libxslt --> 
<xsl:template match="list[@name='item_list'][$lang]"/>

<!-- works as expected --> 
<xsl:template match="list[@name='item_list'][/response/str[@name='lang']]"/>

<!-- works as expected --> 
<xsl:template match="response">
    <xsl:apply-templates select="list[@name='item_list'][$lang]">
</xsl:template>

1 Ответ

11 голосов
/ 12 января 2012

Переменные нельзя использовать в выражениях совпадений в XSLT 1.0.

Из спецификации XSLT 1.0: Определение правил шаблона

Ошибка в значении атрибута соответствия, содержащего VariableReference.

Переменные допускаются в выражениях совпадений в XSLT 2.0 .

Из спецификации XSLT 2.0: Синтаксис шаблонов

Шаблоны могут начинаться с идентификатора FO или вызова ключевой функции при условии, что значение для сопоставления предоставляется в виде литерала или ссылки к переменной или параметру и имени ключа (в случае ключа функция) поставляется в виде строкового литерала. Эти шаблоны никогда не будут сопоставить узел в дереве, корень которого не является узлом документа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...