将节点作为参数传递给 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 包装到一个根元素中,并将其作为输入传递给转换函数。
我需要将节点作为参数传递给 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 包装到一个根元素中,并将其作为输入传递给转换函数。