开发者

How to store xpath in variable and use it with XSLT 1.0

开发者 https://www.devze.com 2023-02-23 05:48 出处:网络
I am trying to use a variable that has xpath in for-each. But it is giving me an error that Expression must evalua开发者_Python百科te to a node-set.

I am trying to use a variable that has xpath in for-each. But it is giving me an error that Expression must evalua开发者_Python百科te to a node-set.

NodeName is defined as

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

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

and here is for-each loop

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


I will take wild guess and assume you're interested in converting variable to node set in order to use it later in XPath. This could be done using extension function exsl:node-set(). The documentation have examples of usage.

Quote:

This use case shows the result of using exsl:node-set() to convert a result tree fragment to a node-set.

source

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

stylesheet

<!--  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>

result

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


Use:

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


XSLT 1.0 (and indeed 2.0) has no standard facility for constructing an XPath expression as a string and then evaluating it. Many processors have an extension function to do this, variously called dyn:evaluate, saxon:evaluate, etc.

0

精彩评论

暂无评论...
验证码 换一张
取 消