重新初始化xslt变量

时间:2011-09-13 09:00:00

标签: xml xslt xpath

我有一个变量:

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

我可以在代码中的任何其他位置重新初始化它吗?是否可能?
我需要保存当前节点并确定是拒绝还是传入。

3 个答案:

答案 0 :(得分:3)

  

设置变量值后,无法更改或修改该值   值!

参考:http://www.w3schools.com/xsl/el_variable.asp

答案 1 :(得分:2)

xsl:变量不能'显式'重新分配,虽然它们的范围仅限于当前构造(例如xsl:template或xsl:for-each),因此当它遍历到下一个时将被“重新初始化” '各自'。

xsl:变量可以指向一个节点,即

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

然后使用例如

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

答案 2 :(得分:2)

XSLT是一种功能语言。在函数式语言变量中,一旦给定值,就无法修改

通过在模板中使用xsl:param并向模板的新调用传递此参数的新值,可以达到与修改变量相同的效果。

以下是一个简短而完整的示例

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

在此XML文档上应用此转换时

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

产生了正确的结果

55

请注意如何“修改”参数:)