将节点作为参数传递给 XSL 样式表

Passing a node as parameter to a XSL stylesheet

我需要将节点作为参数传递给 XSL 样式表。问题是参数作为字符串发送。我已经看到关于这个主题的几个 SO 问题,我知道解决方案(在 XSLT 1.0 中)是使用外部 node-set() 函数将字符串转换为节点集。

我的问题是我正在使用 eXist DB 我似乎无法让其 XSLT 处理器找到任何此类功能。我尝试了命名空间 http://exslt.org/common 中的 EXSLT node-set() 以及 Saxon 和 Xalan 版本(我认为 eXist 曾经使用 Xalan,但现在可能是 Saxon)。

eXist 使用的 XSLT 处理器是否允许这些扩展?如果没有,我还能做些什么吗?

要从数据库引用或转换文档,您应该将路径作为参数传递给转换,然后使用参数和变量引用它

(: 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>)

根据 Martin Honnen 的评论,我认为不可能通过 eXist 中 transform:transform() 函数的 <parameters> 结构传递 XML 节点。该函数似乎去除了作为值传递给它的任何 XML 标签。

作为一种变通方法,我会将我的输入 XML 和我的参数 XML 包装到一个根元素中,并将其作为输入传递给转换函数。