在XSL中的求和函数

3
以下是我的输入XML:

<?xml version="1.0" encoding="utf-8" ?>
<LogiusInhouse>
    <qty9 field="QTY_9,11#">
        <type>90</type>
        <value>12</value>
    </qty9>
    <qty9 field="QTY_9,11#">
        <type>90</type>
        <value>12</value>
    </qty9>
    <dtm9 field="DTM_9,11#">
        <type>145</type>
        <date>20130308</date>
        <format>102</format>
    </dtm9>
</LogiusInhouse>

XSL:

<xsl:template match="/LogiusInhouse">

        <xsl:value-of select="abs(sum(qty9[type='90']/value))div 1000 "/>

</xsl:template>

我的问题是我需要先求绝对值之和,然后将其除以1000,但是我没有得到结果。请帮助我。

2个回答

2
不要使用for-each,使用以下模板:
<xsl:template match="/LogiusInhouse">               
    <xsl:value-of select="sum(//value)"/>                                     
</xsl:template>

使用for-each会输出1212,因为在for-each节点(在您的代码中)中,结果是12

2
甚至可以使用提供的XML:<xsl:value-of select="sum(//qty9/value)"/>,这将更具体地指定要求和的内容。或者是"LogiusInhouse/qty9/value" - Jason Aller
好的解决方案,只要记住 // 选择样式表中的节点 _任何位置_,而不仅仅是 LogiusInhouse 的后代。当然,对于所讨论的 XML 文件,这并不重要。 - Mathias Müller

2
或者,您只需使用以下内容:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" indent="yes"/>

<xsl:template match="/LogiusInhouse">
    <xsl:value-of select="sum(qty9/value)" />
</xsl:template>

</xsl:stylesheet>

我需要将这些值相加,而且这个值应该是绝对值,这样我们就可以去掉加号和减号,然后再除以1000。 - user3305421

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接