我在XSLT中有一个问题。
我有一个变量,假设:
<xsl:variable name="myVar" select="string('1.3,2.1,3.3,5.1,11.4')">
我想添加所有逗号分隔值。
这是我当前的代码,我试图总结存储在$ sum变量中的所有csv值。
<xsl:template name="getCount" >
<xsl:param name="str" /> <!-- $str is having '0.001,0.003' value -->
<xsl:param name="delimiter" />
<xsl:param name="summation" />
<xsl:choose>
<xsl:when test="contains(string($str),string($delimiter))">
<xsl:variable name="beforecomma" select="substring-before(string($str),string($delimiter))" />
<xsl:variable name="aftercomma" select="substring-after(string($str),string($delimiter))" />
<xsl:choose>
<xsl:when test="$aftercomma=''">
<xsl:value-of select="$summation + $beforecomma" />
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="getindexvalue">
<xsl:with-param name="str" select="$aftercomma" />
<xsl:with-param name="delimiter" select="string($delimiter)" />
<xsl:with-param name="summation" select="$summation + beforecomma" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
</xsl:choose>
</xsl:template>
答案 0 :(得分:0)
假设call-template
是拼写错误,应该是对同一模板的递归调用
<xsl:call-template name="getCount">
那么你实际上非常接近一个有效的解决方案。
中的错误<xsl:with-param name="summation" select="$summation + beforecomma" />
您在$
前面错过了beforecomma
:
<xsl:with-param name="summation" select="$summation + $beforecomma" />
如果没有美元,您需要查找名为beforecomma
的子元素,而不是获取变量的值。
其他一些评论:
string()
电话,你可以简单地说,例如contains($str,$delimiter)
代替contains(string($str),string($delimiter))
,因为您正在使用的功能会自动将其参数强制转换为字符串。<xsl:template name="getCount" >
<xsl:param name="str" /> <!-- $str is having '0.001,0.003' value -->
<xsl:param name="delimiter" />
<xsl:param name="summation" select="0" />
<xsl:choose>
<xsl:when test="contains($str,$delimiter)">
<xsl:variable name="beforecomma" select="substring-before($str,$delimiter)" />
<xsl:variable name="aftercomma" select="substring-after($str,$delimiter)" />
<xsl:call-template name="getCount">
<xsl:with-param name="str" select="$aftercomma" />
<xsl:with-param name="delimiter" select="$delimiter" />
<xsl:with-param name="summation" select="$summation + $beforecomma" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$summation + $str" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>