Передача узла в качестве параметра в таблицу стилей XSL

Мне нужно передать узел в качестве параметра в таблицу стилей XSL. Проблема в том, что параметр отправляется в виде строки. Я видел несколько SO вопросов по этой теме, и я знаю, что решение (в XSLT 1.0) заключается в использовании внешнего node-set() функция для преобразования строки в набор узлов.

Моя проблема заключается в том, что я использую eXist DB, и мне кажется, что я не могу получить его XSLT-процессор для обнаружения любой такой функции. Я попробовал EXSLT node-set() из пространства имен http://exslt.org/common а также саксонская и ксаланская версии (я думаю, что eXist использовал Xalan, но теперь это может быть Saxon).

Разрешены ли эти расширения даже в процессоре XSLT, используемом eXist? Если нет, могу ли я что-то еще сделать?

2 ответа

Решение

Согласно комментариям Мартина Хоннена, я не думаю, что возможно передать узел XML через <parameters> структура transform:transform() функция в eXist. Кажется, что функция удаляет все теги XML, переданные ей в качестве значения.

В качестве обходного пути я оберну и мой входной XML, и мой XML-параметр в корневой элемент и передам его в качестве входных данных в функцию преобразования.

Чтобы ссылаться или преобразовывать документы из базы данных, вы должны передать путь в качестве параметра преобразования, а затем обратиться к нему, используя параметр и переменную.

(: xquery :)

let $path-to-document := "/db/test/testa.xml"
let $stylesheet := 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:param name="source" required="no"/>
    <xsl:variable name="error"><error>doc not available</error></xsl:variable>
    <xsl:variable name="theDoc" select="if (doc-available($source)) then doc($source) else $error"/>
    <xsl:template match="/">
       <result><xsl:value-of select="$source"/> - <xsl:value-of select="node-name($theDoc/*)"/></result>
    </xsl:template>
</xsl:stylesheet>


return transform:transform(<dummy/>,$stylesheet, <parameters><param    name="source" value="xmldb:exist://{$path-to-document}"/></parameters>)
Другие вопросы по тегам