dyn:evaluate() 是否在 <xsl:for-each> 内部工作

Is dyn:evaluate() working inside <xsl:for-each>

我正在尝试 运行 在输入 xml 文件上的配置 xml 文件中编写许多 xpath 查询:

<results>
<xsl:for-each select="$config_file/queries/*">

    <xsl:variable name="curr_item_name" select="name()"></xsl:variable>
    <xsl:variable name="curr_xpath_query" select="."></xsl:variable>

    <xsl:element name="{$curr_item_name}">
        <xsl:value-of select="dyn:evaluate($curr_xpath_query)" />
    </xsl:element>
</xsl:for-each>
</results>

我期望 xpath 评估结果有许多 xml 个结果的子元素(与查询的子元素一样多)。

我得到所有正确命名但为空的标签。

有人可以帮助我吗?作为处理器,我正在使用 Xalan eclipse 嵌入式处理器(目前)。

谢谢, 劳拉

那么您想将哪个节点作为 XPath 计算的上下文节点?目前,它是您使用 $config_file/queries/* 处理的任何元素,您可以使用它来提供 XPath 表达式。您可能希望将 XPath 表达式存储在一个变量中,然后使用 for-eachapply-templates 将上下文更改为您未显示的其他节点,如果您之前未将其存储在一个变量。所以让我们假设你有一个全局变量

<xsl:variable name="main-doc" select="/"/>

然后你可以使用例如

<xsl:variable name="path-exp" select="."/>
<xsl:for-each select="$main-doc//foo">
  <xsl:value-of select="dyn:evaluate($path-exp)" />
</xsl:for-each>