Функция вызывается с большим количеством аргументов

Я хочу написать функцию в 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> элемент.

Не уверен, почему это так - другие процессоры не имеют такой проблемы.

Другие вопросы по тегам