Avatar billede agentjna Nybegynder
25. april 2012 - 13:41 Der er 3 kommentarer og
1 løsning

komma, punktum problematik for at benytte SUM funktion i xslt

Hej

Jeg har en simpel xml nedenfor.

Jeg kan ikke benytte SUM funktionen i xslt når der benyttes komma som decimal separator. Ændre jeg det til punktum går det fint.

Så spørgsmålet går på hvordan kan jeg få beregnet en samlet sum.

Hilsen
Jesper 

<test>
        <Ordre>
            <subOrdre ProAfdLitEffId="193117">
                <Mængde>10,5</Mængde>
                <Timer>10</Timer>
            </subOrdre>
            <subOrdre ProAfdLitEffId="193118">
                <Mængde>59,4</Mængde>
                <Timer>20</Timer>
            </subOrdre>
            <subOrdre ProAfdLitEffId="193119">
                <Mængde>14,5</Mængde>
                <Timer>5</Timer>
            </subOrdre>
        </Ordre>
</test>

Og jeg benytter flg. stylesheet til at formatere den og beregne summen.

<?xml version="1.0" encoding="windows-1252"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ino="http://namespaces.softwareag.com/tamino/response2" xmlns:xql="http://metalab.unc.edu/xql/">
    <xsl:output method="html" encoding="ISO-8859-1" version="4.0" indent="yes"/>
    <xsl:template match="/">
        <html>
            <body>
                <form id="form1" runat="server">
                            <table border="0">
                                <tr bgcolor="#FFFFCC">
                                    <th>
                                        <span style="font-size: 12px;">
                                            <span style="font-family: verdana,geneva,sans-serif;">Sum mængde:</span>
                                        </span>
                                    </th>
                                    <th>
                                        <font face="verdana" style="font-size: 12px;">
                                            <xsl:value-of select="sum(//Mængde)"/>
                                        </font>
                                    </th>
                                </tr>
                            </table>
                            <table border="0">
                                <tr bgcolor="#FFFFCC">
                                    <th>
                                        <span style="font-size: 12px;">
                                            <span style="font-family: verdana,geneva,sans-serif;">Sum Timer:</span>
                                        </span>
                                    </th>
                                    <th>
                                        <font face="verdana" style="font-size: 12px;">
                                            <xsl:value-of select="sum(//Timer)"/>
                                        </font>
                                    </th>
                                </tr>
                            </table>
                </form>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>
Avatar billede agentjna Nybegynder
25. april 2012 - 13:55 #1
Output er

Sum mængde:  NaN 
Sum Timer:  35 

ændres "," til "." er output

Sum mængde:  84.4 
Sum Timer:  35 


/Jesper
Avatar billede mireigi Novice
25. april 2012 - 14:41 #2
Jeg vil foreslå, at du skifter til engelsk punktsætning, og skifter fra danske navn til engelske. I data udveksling/håndtering, er det best practice at holde sig til engelsk, og så lade data være i et vilkårligt sprog.

Hvis det er udelukket, kan du kigge på dette:
http://www.devguru.com/technologies/xslt/quickref/xslt_function_formatnumber.html
Avatar billede agentjna Nybegynder
25. april 2012 - 14:51 #3
Enig. Men det system der leverer data har jeg desværre ingen indflydelse på.
Avatar billede agentjna Nybegynder
26. april 2012 - 14:26 #4
Hej

Følgende XSLT gør tricket

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xalan="http://xml.apache.org/xalan">
    <xsl:output method="text"/>
    <xsl:template match="/">
        <xsl:variable name="rtf">
            <xsl:for-each select="//Mængde">
                <num>
                    <xsl:value-of select="translate(., ',', '.')"/>
                </num>
            </xsl:for-each>
        </xsl:variable>
        <xsl:value-of select="sum(($rtf)/num)"/>
    </xsl:template>
</xsl:stylesheet>
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