Avatar billede jesperwerge Nybegynder
19. maj 2006 - 10:54 Der er 3 kommentarer og
1 løsning

Funktion sum() i for-each of if statement

Hej eksperter,

jeg har følgende statements i et xsl dokument, hvor jeg gerne vil tjekke om et felt er = VAT hvis så, sum alle de poster hvor dette matcher.

code:

<xsl:for-each select="com:InvoiceLine">
<xsl:if test ="com:Item/com:Tax/com:RateCategoryCodeID='VAT'">
  <xsl:variable name="varVAT" select="com:LineExtensionAmount" />
  <xsl:value-of select="format-number(sum($varVAT), '##0.00')"/> 
</xsl:if>
</xsl:for-each>

resultatet bliver følgende
33.00 34.90

ønsket resultat :
67.90

-------------
Den vister de rigtige værdier, men sum() beregner ikke rigtig.

jeg har en almindelig sum() i en anden felt hvor på det virker:
<xsl:value-of select="sum(com:InvoiceLine/com:LineExtensionAmount)" />

håber I kan hjælpe
Avatar billede jesperwerge Nybegynder
19. maj 2006 - 13:08 #1
Det er jo desværre korrekt det den gør idet jeg siger at den for hver værdi den finder skal den sum den linje, hvilket altid vil resultere i X antal sum pr. værdi.

så mit spørgsmål må være hvordan får jeg omstruktureret denne så jeg får summen af de værdier der finder? altså en total beregning af alle de forkomster der findes i min if statement.

Hjææælp :)
Avatar billede jesperwerge Nybegynder
19. maj 2006 - 14:40 #2
Selve XML filen ser således ud (brudstykke af original):

  <com:InvoiceLine>
    <com:InvoicedQuantity unitCode="Stk" unitCodeListAgencyID="n/a">1</com:InvoicedQuantity>
    <com:LineExtensionAmount currencyID="DKK">-33161.77</com:LineExtensionAmount>
    <com:Item>
      <com:ID schemeID="n/a">n/a</com:ID>
      <com:Description>Nesa har opkrævet a conto</com:Description>
      <com:Tax>
        <com:RateCategoryCodeID>VAT</com:RateCategoryCodeID>
        <com:TypeCode>VAT</com:TypeCode>
        <com:RatePercentNummeric>25</com:RatePercentNummeric>
      </com:Tax>
    </com:Item>
    <com:BasePrice>
      <com:PriceAmount currencyID="DKK">-33161.77</com:PriceAmount>
    </com:BasePrice>
  </com:InvoiceLine>
  <com:InvoiceLine>
    <com:InvoicedQuantity unitCode="Stk" unitCodeListAgencyID="n/a">1</com:InvoicedQuantity>
    <com:LineExtensionAmount currencyID="DKK">-58.47</com:LineExtensionAmount>
    <com:Item>
      <com:ID schemeID="n/a">n/a</com:ID>
      <com:Description>Andre betalinger - momsfritaget</com:Description>
      <com:Tax>
        <com:RateCategoryCodeID>ZERO_RATED</com:RateCategoryCodeID>
        <com:TypeCode>ZERO_RATED</com:TypeCode>
        <com:RatePercentNummeric>00</com:RatePercentNummeric>
      </com:Tax>
    </com:Item>
    <com:BasePrice>
      <com:PriceAmount currencyID="DKK">-58.47</com:PriceAmount>
    </com:BasePrice>
  </com:InvoiceLine>
Avatar billede Slettet bruger
23. maj 2006 - 20:22 #3
Til sådan noget er der ingen grund til at bruge for-each - fortæl processoren hvad det er for nogle elementer du gerne vil have summen af, f.eks.:

Giv mig summen af "LineExtensionAmount" for alle "InvoiceLine" elementer hvor Item/Tax/RateCategoryCodeID er lig med 'VAT':

<xsl:value-of select="format-number(sum(com:InvoiceLine[com:Item/com:Tax/com:RateCategoryCodeID='VAT']/com:LineExtensionAmount), '##0.00')"/>

/CS
Avatar billede jesperwerge Nybegynder
23. maj 2006 - 22:29 #4
Hej graystate

Der er smukt, det virker præsis som forventet, jeg havde ikke læst på lektion ordenligt. tænkte lidt for meget i kode sprog :)

tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester