Xml XSLT:sum with condition

Xml XSLT:sum with condition,xml,xslt,Xml,Xslt,我想通过基于Name标记的摸索,通过XSLT转换下面的XML,并获得Amount标记与条件(Status='Draft')的总和。请告知 输入XML: <?xml version='1.0' encoding='UTF-8'?> <wd:Data xmlns:wd="urn:com.test/bsvc"> <wd:Entry> <wd:Name>ABC</wd:Name> &l

我想通过基于Name标记的摸索,通过XSLT转换下面的XML,并获得Amount标记与条件(Status='Draft')的总和。请告知

输入XML:

<?xml version='1.0' encoding='UTF-8'?>
<wd:Data xmlns:wd="urn:com.test/bsvc">
    <wd:Entry>
        <wd:Name>ABC</wd:Name>
        <wd:ID>123</wd:ID>
        <wd:Amount>10</wd:Amount>
        <wd:Status>Pending</wd:Status>
    </wd:Entry>
    <wd:Entry>
        <wd:Name>ABC</wd:Name>
        <wd:ID>123</wd:ID>
        <wd:Amount>20</wd:Amount>
        <wd:Status>Draft</wd:Status>
    </wd:Entry>
    <wd:Entry>
        <wd:Name>ABC</wd:Name>
        <wd:ID>123</wd:ID>
        <wd:Amount>30</wd:Amount>
        <wd:Status>Draft</wd:Status>
    </wd:Entry>
</wd:Data>
<Details>
   <ID>123</ID>
   <Name>ABC</Name>
   <Total_Unverified_Amount>60.00</Total_Unverified_Amount>
   <Charges_Draft>60</Charges_Draft>
</Details>
<Details>
   <ID>123</ID>
   <Name>ABC</Name>
   <Total_Unverified_Amount>60.00</Total_Unverified_Amount>
   <Charges_Draft>50</Charges_Draft>
</Details>

基础知识
123
10
悬而未决的
基础知识
123
20
草稿
基础知识
123
30
草稿
XSLT

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:wd="urn:com.test/bsvc" exclude-result-prefixes="wd">
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
    
    <xsl:template match="/">
        
        
        <xsl:for-each-group select="wd:Data/wd:Entry" group-by="wd:Name">
            
            
            <Details>
                <ID>
                    <xsl:value-of select="wd:ID"/>
                </ID>
                <Name>
                    <xsl:value-of select="wd:Name"/>
                </Name>
                <Total_Unverified_Amount>
                    <xsl:value-of select='format-number(sum(current-group()/wd:Amount),"##.00")'/>
                </Total_Unverified_Amount>
                <Charges_Draft>
                    <xsl:value-of select="sum(current-group()/wd:Amount[current-group()/wd:Status = 'Draft'])"/>
                </Charges_Draft>
            </Details>
        </xsl:for-each-group>
        
    </xsl:template>
</xsl:stylesheet>

生成的输出:

<?xml version='1.0' encoding='UTF-8'?>
<wd:Data xmlns:wd="urn:com.test/bsvc">
    <wd:Entry>
        <wd:Name>ABC</wd:Name>
        <wd:ID>123</wd:ID>
        <wd:Amount>10</wd:Amount>
        <wd:Status>Pending</wd:Status>
    </wd:Entry>
    <wd:Entry>
        <wd:Name>ABC</wd:Name>
        <wd:ID>123</wd:ID>
        <wd:Amount>20</wd:Amount>
        <wd:Status>Draft</wd:Status>
    </wd:Entry>
    <wd:Entry>
        <wd:Name>ABC</wd:Name>
        <wd:ID>123</wd:ID>
        <wd:Amount>30</wd:Amount>
        <wd:Status>Draft</wd:Status>
    </wd:Entry>
</wd:Data>
<Details>
   <ID>123</ID>
   <Name>ABC</Name>
   <Total_Unverified_Amount>60.00</Total_Unverified_Amount>
   <Charges_Draft>60</Charges_Draft>
</Details>
<Details>
   <ID>123</ID>
   <Name>ABC</Name>
   <Total_Unverified_Amount>60.00</Total_Unverified_Amount>
   <Charges_Draft>50</Charges_Draft>
</Details>

123
基础知识
60
60
所需输出:

<?xml version='1.0' encoding='UTF-8'?>
<wd:Data xmlns:wd="urn:com.test/bsvc">
    <wd:Entry>
        <wd:Name>ABC</wd:Name>
        <wd:ID>123</wd:ID>
        <wd:Amount>10</wd:Amount>
        <wd:Status>Pending</wd:Status>
    </wd:Entry>
    <wd:Entry>
        <wd:Name>ABC</wd:Name>
        <wd:ID>123</wd:ID>
        <wd:Amount>20</wd:Amount>
        <wd:Status>Draft</wd:Status>
    </wd:Entry>
    <wd:Entry>
        <wd:Name>ABC</wd:Name>
        <wd:ID>123</wd:ID>
        <wd:Amount>30</wd:Amount>
        <wd:Status>Draft</wd:Status>
    </wd:Entry>
</wd:Data>
<Details>
   <ID>123</ID>
   <Name>ABC</Name>
   <Total_Unverified_Amount>60.00</Total_Unverified_Amount>
   <Charges_Draft>60</Charges_Draft>
</Details>
<Details>
   <ID>123</ID>
   <Name>ABC</Name>
   <Total_Unverified_Amount>60.00</Total_Unverified_Amount>
   <Charges_Draft>50</Charges_Draft>
</Details>

123
基础知识
60
50
我想通过基于Name标记的摸索,通过XSLT转换下面的XML,并获得Amount标记与条件(Status='Draft')的总和。请告知

,而不是:

<Charges_Draft>
    <xsl:value-of select="sum(current-group()/wd:Amount[current-group()/wd:Status = 'Draft'])"/>
</Charges_Draft>
当当前组中至少有一个
wd:Entry
wd:Status
“Draft”
时,返回true。然后,此结果将同样应用于当前测试组的所有成员。

而不是:

<Charges_Draft>
    <xsl:value-of select="sum(current-group()/wd:Amount[current-group()/wd:Status = 'Draft'])"/>
</Charges_Draft>

当当前组中至少有一个
wd:Entry
wd:Status
“Draft”
时,返回true。然后,此结果将同样应用于当前被测试组的所有成员。

谢谢,成功了谢谢,成功了