2014-12-03 3 views
0

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

ответ

2

Хорошо, это хорошая головоломка. Выключает libxslt (процессор, используемый xsltproc) не будет выполнять функцию, если вы не включите extension-element-prefixes="func" в элемент <xsl:stylesheet>.

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

+0

Именно так. Благодаря! – Jagger

+0

XSLT 1.0 - очень сложная письменная спецификация, и легко пропустить некоторые из ее тонкостей, одним из которых является различие между терминами «элемент» и «инструкция». Внимательно прочитав определение «элемента расширения», ясно, что только инструкции могут быть элементами расширения, а не декларациями; и префиксы расширения-элемента не нужны для объявлений, специфичных для поставщика. Но вы должны очень внимательно прочитать, чтобы прийти к такому выводу. –

Смежные вопросы