Функция вызывается с большим количеством аргументов
Я хочу написать функцию в XSLT 1.0 с использованием библиотеки EXSLT. Вот моя таблица стилей.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:func="http://exslt.org/functions"
xmlns:my="http://www.example.com/">
<xsl:output method="text" encoding="UTF-8"/>
<func:function name="my:test">
<xsl:param name="param1" />
<xsl:param name="param2" />
<func:result select="concat($param1, $param2)" />
</func:function>
<xsl:template match="/">
<xsl:value-of select="my:test('test1', 'test2')" />
</xsl:template>
</xsl:stylesheet>
К сожалению, когда я пытаюсь выполнить это с xsltproc
Я получаю следующую ошибку.
{ http://www.example.com/} test: вызывается со слишком большим количеством аргументов xmlXPathCompiledEval: 1 объектов осталось в стеке. ошибка времени выполнения: файл exslt_function_test.xsl строка 16 элемент значение-из оценки XPath не вернуло никакого результата.
Я не вижу никакой ошибки. Функция определяется и вызывается с двумя параметрами. У кого-нибудь была подобная проблема в прошлом?
Чтобы вырезать ненужные комментарии... Нет, я не могу использовать XSLT 2.0.
1 ответ
Ну, это хорошая головоломка. Оказывается, libxslt (процессор, используемый xsltproc) не будет выполнять функцию, если вы не включите extension-element-prefixes="func"
в <xsl:stylesheet>
элемент.
Не уверен, почему это так - другие процессоры не имеют такой проблемы.