Мне нужно передать узел в качестве параметра в таблицу стилей XSL. Проблема в том, что параметр отправляется в виде строки. Я видел несколько вопросов SO по этой теме и знаю, что решение (в XSLT 1.0) заключается в использовании внешней функции node-set()
для преобразования строки в набор узлов.
Моя проблема в том, что я использую eXist DB. Кажется, я не могу заставить свой XSLT-процессор найти любую такую функцию. Я пробовал EXSLT node-set()
из пространства имен http://exslt.org/common
, а также версии Saxon и Xalan (я думаю, что eXist раньше использовал Xalan, но теперь это может быть Saxon).
Разрешены ли эти расширения даже в процессоре XSLT, используемом eXist? Если нет, могу ли я сделать что-то еще?
system-property('xsl:vendor')
иsystem-property('xsl:product-version')
. Что касается ваших текущих попыток, вы используете код Java для выполнения преобразования XSLT или XQuery? Рассмотрите возможность показать подробности этого кода, передающего параметр и выполняющего преобразование. - person Martin Honnen   schedule 19.11.2016<parameters><param name="param-name1" value="param-value1"/></parameters>
. Это выглядит так, как будто параметры, по крайней мере, для функцииtransform
, представляют собой просто пары строк имя/значение. - person Martin Honnen   schedule 19.11.2016node-set()
, вы должны иметь возможность использовать ее для этого, по крайней мере, в версии EXSLT. В его документации сказано: Вы также можете использовать эту функцию для преобразования строки в текстовый узел, что полезно, если вы хотите передать строку функции, которая принимает только набор узлов. exslt.org/exsl/functions/node-set - person pajevic   schedule 20.11.2016node-set()
. Чтобы превратить строку в текстовый узел, НЕ означает синтаксический анализ экранированной разметки, как если бы это был XML, и превращение ее в набор узлов. Для этого вам понадобится такая функция, какparse-xml()
, которая доступна в XSLT 3.0. В XSLT 1.0 единственным выходом является вывод строки с отключенным экранированием, а затем обработка полученного документа на втором проходе. - person michael.hor257k   schedule 20.11.2016sum(amount | exsl:node-set($fee))
. -- Кстати, в каких реализациях вы можете использоватьnode-set()
для разбора экранированного XML? - person michael.hor257k   schedule 21.11.2016