我有一个变量:
<xsl:variable name="code" select="F2"/>
我可以在代码中的任何其他位置重新初始化它吗?是否可能?
我需要保存当前节点并确定是拒绝还是传入。
答案 0 :(得分:3)
设置变量值后,无法更改或修改该值 值!
答案 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
请注意如何“修改”参数:)