Xml XSL如何对根据元素属性计算的元素值求和?
我希望根据元素的属性计算不同的值,然后对计算出的值求和 xml结构如下所示:Xml XSL如何对根据元素属性计算的元素值求和?,xml,xslt,sum,Xml,Xslt,Sum,我希望根据元素的属性计算不同的值,然后对计算出的值求和 xml结构如下所示: <elements> <element type="type1"> <value>10</value> <date>01.05.2012</date> </element> <element type="type2"> <value>20<
<elements>
<element type="type1">
<value>10</value>
<date>01.05.2012</date>
</element>
<element type="type2">
<value>20</value>
<date>02.03.2012</date>
</element>
<element type="type2">
<value>20</value>
<date>02.03.2012</date>
</element>
</elements>
<xsl:for-each select="/elements">
<xsl:sort select="date"/>
<xsl:choose>
<xsl:when test="type='type1'">
<xsl:value-of select="value*20"/>
<xsl:value-of select="date"/>
</xsl:when>
<xsl:when test="type='type1'">
<xsl:value-of select="value*10"/>
<xsl:value-of select="date"/>
</xsl:when>
</xsl:choose>
(Here should be a sum of all the values that have been calculated.)
</xsl:for-each>
我希望能够在计算后显示值(根据“类型”使用系数),按日期对不同的值进行排序,并显示所有计算值的总和
我相信有更好的方法来做我想做的事情,我很高兴有任何建议 假设@type=“type1”应乘以10,
@type=“type2”`应乘以20,则以下样式表:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="elements/element">
<xsl:sort select="date" />
</xsl:apply-templates>
<xsl:value-of select="'
'"/>
<xsl:value-of select="sum(*/element[@type='type1']/value
[number()=number()]) * 10 +
sum(*/element[@type='type2']/value
[number()=number()]) * 20"/>
</xsl:template>
<xsl:template match="element[@type='type1']/value">
<xsl:value-of select=". * 10"/>
</xsl:template>
<xsl:template match="element[@type='type2']/value">
<xsl:value-of select=". * 20"/>
</xsl:template>
<!-- this matches any of the value elements who's values are not a number -->
<xsl:template match="element[@type]/value[number()!=number()]">
<xsl:text>0</xsl:text>
</xsl:template>
</xsl:stylesheet>
类型1和类型2的乘法因子是多少?您的示例显示了对type1的测试和对不同值的乘法。非常感谢您的回答。我仍然存在空值生成NaN的问题。我该如何应对?我已经尝试在每个求和中的xpath之后使用[number(.)=number(.)],但它不起作用。我已经调整了答案,以适应
value
元素的空值和非数值。您可以定义一个与这些值
元素匹配的模板,并发出一个0
,在总和中,使用谓词过滤器排除那些值
元素。再次感谢您。很抱歉,我刚才回答了,但前一周我几乎没有时间。我还有一个问题。如果其中一种类型不存在,您如何处理?
100
01.05.2012
400
02.03.2012
400
02.03.2012
900