Я хочу написать функцию в 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: called with too many arguments xmlXPathCompiledEval: 1 objects left on the stack. runtime error: file exslt_function_test.xsl line 16 element value-of XPath evaluation returned no result.
Я не вижу ошибок. Функция определена и вызывается с помощью двух параметров. У кого-то была аналогичная проблема в прошлом?
Чтобы отрезать любые ненужные комментарии ... Нет, я не могу использовать XSLT 2.0.
Именно так. Благодаря! – Jagger
XSLT 1.0 - очень сложная письменная спецификация, и легко пропустить некоторые из ее тонкостей, одним из которых является различие между терминами «элемент» и «инструкция». Внимательно прочитав определение «элемента расширения», ясно, что только инструкции могут быть элементами расширения, а не декларациями; и префиксы расширения-элемента не нужны для объявлений, специфичных для поставщика. Но вы должны очень внимательно прочитать, чтобы прийти к такому выводу. –