是dyn:evaluate()在<xsl:for-each>中工作

时间:2017-11-24 21:04:11

标签: xml xslt xpath xalan

我试图在输入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>

我期望有许多xml元素的子结果(与查询&#39;孩子一样多)带有xpath评估结果。

我得到所有标签都正确命名但是空。

Cana有人帮助我吗?由于处理器我正在使用Xalan eclipse嵌入式处理器(目前)。

谢谢, 劳拉

1 个答案:

答案 0 :(得分:0)

那么您希望哪个节点成为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>