如何在变量中存储xpath并将其与XSLT 1.0一起使用

时间:2011-04-08 14:45:24

标签: xml xslt

我正在尝试使用在for-each中具有xpath的变量。但它给了我一个Expression必须评估到节点集的错误。

NodeName定义为

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

<xsl:variable name="SyncPath" 
              select="concat('/combinedxml/com.csc_PolicySyncRs/',$NodeName)"/>

这里是for-each循环

<xsl:for-each select="$SyncPath/*">

3 个答案:

答案 0 :(得分:2)

我会猜测并假设您对将变量转换为节点集感兴趣,以便稍后在XPath中使用它。这可以使用扩展函数exsl:node-set()来完成。 documentation有使用示例。

引用:

  

此用例显示结果   使用exsl:node-set()来转换   结果树片段到节点集。

     

<强>来源

<doc>
   <one />
   <two />
   <three />
   <four />
</doc>
  

<强>样式表

<!--  Test exslt:node-set applied to a result tree fragment  -->
<xsl:variable name="tree">
   <a>
      <b>
         <c>
            <d />
         </c>
      </b>
   </a>
</xsl:variable>
<xsl:template match="/">
   <out>
      <xsl:value-of select="count(exslt:node-set(//*))" />
   </out>
</xsl:template>
  

<强>结果

<out xmlns:exslt="http://exslt.org/common">5</out>

答案 1 :(得分:1)

使用

<xsl:variable name="SyncPath"
    select="/combinedxml/com.csc_PolicySyncRs/*[name()=$NodeName]"/>

答案 2 :(得分:0)

XSLT 1.0(实际上是2.0)没有用于将XPath表达式构造为字符串然后对其进行评估的标准工具。许多处理器都有扩展功能来执行此操作,各种称为dyn:evaluate,saxon:evaluate等。