我有像
这样的xml<MainNode>
<Data SubjectID="19233">
<SubNode CS="100,1" >
<AB V="PSDF"/>
</SubNode>
</Data>
<Data SubjectID="19234">
<SubNode CS="111,1">
<AB V="PSDF" />
</SubNode>
</Data>
</MainNode>
当我尝试将属性“@CS”的值相加时,我得到“NaN”作为结果。任何人都可以帮我解决这个问题。
提前致谢 普拉迪普
答案 0 :(得分:1)
我认为这太复杂了,但你可以试试:
<xsl:template name="sum_helper">
<xsl:param name="current" select="0" />
<xsl:param name="rest" />
<xsl:choose>
<xsl:when test="count($rest) > 0">
<xsl:call-template name="sum_helper">
<xsl:with-param name="current"
select="$current + translate($rest[1],',','.')" />
<xsl:with-param name="rest" select="$rest[position()>1]" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$current" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
...
<xsl:call-template name="sum_helper">
<xsl:with-param name="rest" select="//SubNode/@CS" />
</xsl:call-template>
...
答案 1 :(得分:1)
作为XPath 2.0单行:
sum(/*/*/SubNode/@CS/number(translate(.,',','.')))
XSLT 2.0解决方案:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:value-of select=
"sum(/*/*/SubNode/@CS/number(translate(.,',','.')))"/>
</xsl:template>
</xsl:stylesheet>
使用FXSL的XSLT 1.0 :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:f="http://fxsl.sf.net/"
xmlns:func-transform="f:func-transform"
exclude-result-prefixes="xsl f func-transform"
>
<xsl:import href="transform-and-sum.xsl"/>
<xsl:output method="text"/>
<func-transform:func-transform/>
<xsl:template match="/">
<xsl:call-template name="transform-and-sum">
<xsl:with-param name="pFuncTransform"
select="document('')/*/func-transform:*[1]"/>
<xsl:with-param name="pList" select="/*/*/SubNode/@CS"/>
</xsl:call-template>
</xsl:template>
<xsl:template match="func-transform:*" mode="f:FXSL">
<xsl:param name="arg1"/>
<xsl:value-of select="translate($arg1, ',', '.')"/>
</xsl:template>
</xsl:stylesheet>
应用于提供的XML文档:
<MainNode>
<Data SubjectID="19233">
<SubNode CS="100,1" >
<AB V="PSDF"/>
</SubNode>
</Data>
<Data SubjectID="19234">
<SubNode CS="111,1">
<AB V="PSDF" />
</SubNode>
</Data>
</MainNode>
所有这三种解决方案都会产生:
211.2