开发者

reinitializing xslt variable

I have a variable:

<xsl:variable name="code" select="F2"/>

can I reinitializing it anywhere else in my code? is it possible?

I need save the current node in it and determine w开发者_开发问答hether rejected it or pass in.


Once you have set a variable's value, you cannot change or modify that value!

Reference: http://www.w3schools.com/xsl/el_variable.asp


xsl:variables cannot be reassigned 'explicitly', although their scope is limited to the current construct (e.g. xsl:template or xsl:for-each), and so will be 're-initialized' as it traverses to the next 'each'.

xsl:variables can be pointed to a node, i.e.

<xsl:variable name="someNodeVar" select="xpathToElement"/>

and then used e.g.

<xsl:value-of select="$someNodeVar/relativeXpathGoesHere/text()"/>


XSLT is a functional language. In functional languages variables, once given value, cannot be modified.

One can achieve the same effect as modifying a variable, by using xsl:param in a template and passing in a new invocation of the template a new value for this parameter.

Here is a short and complete example:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="nums">
  <xsl:call-template name="sum"/>
 </xsl:template>

 <xsl:template name="sum">
  <xsl:param name="pList" select="*"/>
  <xsl:param name="pAccum" select="0"/>

  <xsl:choose>
   <xsl:when test="not($pList)">
    <xsl:value-of select="$pAccum"/>
   </xsl:when>
   <xsl:otherwise>
     <xsl:call-template name="sum">
      <xsl:with-param name="pList"
           select="$pList[position() > 1]"/>
       <xsl:with-param name="pAccum" select="$pAccum+$pList[1]"/>
     </xsl:call-template>
   </xsl:otherwise>
  </xsl:choose>
 </xsl:template>
</xsl:stylesheet>

when this transformation is applied on this XML document:

<nums>
  <num>01</num>
  <num>02</num>
  <num>03</num>
  <num>04</num>
  <num>05</num>
  <num>06</num>
  <num>07</num>
  <num>08</num>
  <num>09</num>
  <num>10</num>
</nums>

the correct result is produced:

55

Do note how the parameters are "modified" :)

0

上一篇:

下一篇:

精彩评论

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

最新问答

问答排行榜