saxon:evaluate 使用 Saxon 9.1.0.7
saxon:evaluate with Saxon 9.1.0.7
我必须将一些脚本更新到 Saxon 9.1.0.7,我在使用 saxon:evaluate 时遇到了一些问题。基本上我必须将 3 个或更多 XML 合并为一个。
我做了一个小样本发生了什么。
这是我的 xslt:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:saxon="http://saxon.sf.net/" version="2.0">
<xsl:template match="/">
<root>
<title>Test Doc</title>
<xsl:call-template name="slave">
<xsl:with-param name="path_to_node" select="root/firstnode"/>
<xsl:with-param name="document_src" select="document(root/docsrc)" />
</xsl:call-template>
</root>
</xsl:template>
<xsl:template name="slave">
<xsl:param name="path_to_node"/>
<xsl:param name="document_src"/>
<xsl:copy-of select="$document_src" />
<xsl:copy-of select="$path_to_node" />
<xsl:for-each select="saxon:evaluate(concat('$document_src', $path_to_node))">
<xsl:value-of select="." />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
这是我的输入 xml:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
<docsrc>file://C:/Source/temp-docsrc.xml</docsrc>
<firstnode>/docsrc/nodesrc/*</firstnode>
</root>
这是额外的源温度-docsrc.xml:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<docsrc>
<nodesrc>
<node_a>A</node_a>
<node_b>B</node_b>
<node_c>C</node_c>
<node_d>D</node_d>
</nodesrc>
</docsrc>
处理器告诉我:
Static error in XPath expression supplied to saxon:evaluate:
Undeclared variable in XPath expression: $document_src;
SystemID: ; Line#: 19; Column#: -1
至少在Saxon 9.5中,根据http://saxonica.com/documentation9.5/functions/saxon/evaluate.html,表达式应该有名为$p1
、$p2
等的参数,然后你可以使用saxon:evaluate(concat('$p1', $path_to_node), $document_src)
。我想 9.1 有相同的规则,但我没有检查它的文档。
另一种方法是依靠上下文节点来传递这个值:
<xsl:for-each select="$document_src/saxon:evaluate(concat('.', $pathToNode))">...
我必须将一些脚本更新到 Saxon 9.1.0.7,我在使用 saxon:evaluate 时遇到了一些问题。基本上我必须将 3 个或更多 XML 合并为一个。 我做了一个小样本发生了什么。
这是我的 xslt:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:saxon="http://saxon.sf.net/" version="2.0">
<xsl:template match="/">
<root>
<title>Test Doc</title>
<xsl:call-template name="slave">
<xsl:with-param name="path_to_node" select="root/firstnode"/>
<xsl:with-param name="document_src" select="document(root/docsrc)" />
</xsl:call-template>
</root>
</xsl:template>
<xsl:template name="slave">
<xsl:param name="path_to_node"/>
<xsl:param name="document_src"/>
<xsl:copy-of select="$document_src" />
<xsl:copy-of select="$path_to_node" />
<xsl:for-each select="saxon:evaluate(concat('$document_src', $path_to_node))">
<xsl:value-of select="." />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
这是我的输入 xml:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
<docsrc>file://C:/Source/temp-docsrc.xml</docsrc>
<firstnode>/docsrc/nodesrc/*</firstnode>
</root>
这是额外的源温度-docsrc.xml:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<docsrc>
<nodesrc>
<node_a>A</node_a>
<node_b>B</node_b>
<node_c>C</node_c>
<node_d>D</node_d>
</nodesrc>
</docsrc>
处理器告诉我:
Static error in XPath expression supplied to saxon:evaluate:
Undeclared variable in XPath expression: $document_src;
SystemID: ; Line#: 19; Column#: -1
至少在Saxon 9.5中,根据http://saxonica.com/documentation9.5/functions/saxon/evaluate.html,表达式应该有名为$p1
、$p2
等的参数,然后你可以使用saxon:evaluate(concat('$p1', $path_to_node), $document_src)
。我想 9.1 有相同的规则,但我没有检查它的文档。
另一种方法是依靠上下文节点来传递这个值:
<xsl:for-each select="$document_src/saxon:evaluate(concat('.', $pathToNode))">...