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))">...