【问题标题】:Is dyn:evaluate() working inside <xsl:for-each>dyn:evaluate() 是否在 <xsl:for-each> 内部工作
【发布时间】:2017-11-24 21:04:10
【问题描述】:

我正在尝试在输入 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 嵌入式处理器(目前)。

谢谢, 劳拉

【问题讨论】:

  • 如果我在 foreach 循环内部和外部编写一个绝对 xpath 评估语句,则循环外部的工作正常,内部的返回空结果。
  • 请向我们展示源文档、预期输出和实际输出。

标签: xml xslt xpath xalan


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    相关资源
    最近更新 更多