Hjælp til transformation af xml i dårlig kvalitet.
Jeg sidder og prøver at transformere noget xml, der mildt sagt er af meget dårlig kvalitet. Dette medfører desværre xslt i afart, man måske godt kunne undvære. Desværre kan jeg ikke ordne xml data, da jeg ikke har lov til det. Så derfor har jeg brug for lidt hjælp.
- Jeg har en oversigt over kunder. Samme kunde fremgår flere gange i xml data (redundans).
- Jeg har brug for at gruppere data, så data er samlet for en kunde. Herudover hvis kunden har samme ordrenr på nogle varer skal disse samles.
- Til sidst skal prisen lægges sammen med et ialt beløb pr ordre (dvs dem med samme ordre nummer).
Xml strukturen ser således ud:
<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="oversigt.xsl"?>
<Kunder>
<Kunde>
<Navn>Allan Simonsen</AssNavn>
<Ordrenr>10001-004</Ordrenr>
<Ordre>
<ProduktId>211169-66</ProduktId>
<SalgsDato>01.02.2010</SalgsDato>
<Pris>350,86</Pris>
</Ordre>
</Kunde>
<Kunde>
<Navn>Allan Simonsen</AssNavn>
<Ordrenr>10001-004</Ordrenr>
<Ordre>
<ProduktId>211169-56</ProduktId>
<SalgsDato>01.02.2010</SalgsDato>
<Pris>305,76</Pris>
</Ordre>
</Kunde>
<Kunde>
<Navn>Allan Simonsen</AssNavn>
<Ordrenr>10001-004</Ordrenr>
<Ordre>
<ProduktId>211169-46</ProduktId>
<SalgsDato>01.02.2010</SalgsDato>
<Pris>250,41</Pris>
</Ordre>
</Kunde>
<Kunde>
<Navn>Allan Simonsen</AssNavn>
<Ordrenr>1004-003</Ordrenr>
<Ordre>
<ProduktId>123869-18</ProduktId>
<SalgsDato>01.02.2010</SalgsDato>
<Pris>750,41</Pris>
</Ordre>
</Kunde>
<Kunde>
<Navn>Martin Jespersen</AssNavn>
<Ordrenr>1004525-003</Ordrenr>
<Ordre>
<ProduktId>211169-46</ProduktId>
<SalgsDato>01.02.2010</SalgsDato>
<Pris>250,41</Pris>
</Ordre>
</Kunde>
<Kunde>
<Navn>Martin Jespersen</AssNavn>
<Ordrenr>1004525-003</Ordrenr>
<Ordre>
<ProduktId>2119-460</ProduktId>
<SalgsDato>01.02.2010</SalgsDato>
<Pris>246,41</Pris>
</Ordre>
</Kunde>
<Kunde>
<Navn>Martin Jespersen</AssNavn>
<Ordrenr>1004525-002</Ordrenr>
<Ordre>
<ProduktId>2119-460</ProduktId>
<SalgsDato>01.02.2010</SalgsDato>
<Pris>246,41</Pris>
</Ordre>
</Kunde>
<Kunde>
<Navn>Martin Jespersen</AssNavn>
<Ordrenr>1004525-002</Ordrenr>
<Ordre>
<ProduktId>2119-461</ProduktId>
<SalgsDato>01.02.2010</SalgsDato>
<Pris>476,31</Pris>
</Ordre>
</Kunde>
</Kunder>
Jeg har selv forsøgt med at bruge preceding::sibling, men vil ikke poste det jeg har ind her, da det nok vil påvirke Jer eksperter :)
Data skal præsenteres således, at der i starten skrives navn på kunden (Allan Simonsen) én gang, og herefter kommer ordrenr, hvorefter, der er en html tabel med en tabel header:
Navn: [Kundenavn]
Ordre: [OrdreNr]
[ProduktId][SalgsDato][Pris]
...
...
...
Ialt beløb:
Er der nogen, der kan hjælpe? :)
Skrevet tir. d. 11. maj 2010 kl. 17:52:59| #1
For at illustrer mit behov her er eksempel:
Navn: Allan Simonsen (én gang)
Ordre: 10001-004
ProduktId | SalgsDato | Pris
--------------------------------
211169-66 | 01.02.2010 | 350,86
211169-56 | 01.02.2010 | 305,76
211169-46 | 01.02.2010 | 250,41
Ialt beløb: 907,03
Ordre: 1004-003
ProduktId | SalgsDato | Pris
--------------------------------
123869-18 | 01.02.2010 | 750,41
Ialt beløb: 750,41
Navn: Martin Jespersen (én gang)
Ordre: 1004525-003
ProduktId | SalgsDato | Pris
--------------------------------
211169-46 | 01.02.2010 | 250,41
...
...
...
Skrevet tir. d. 11. maj 2010 kl. 21:30:05| #2
lille fejl i xml strukturen 'AssNavn' = 'Navn'.
Skrevet ons. d. 12. maj 2010 kl. 16:49:53| #3
Hej..
Jeg får følgende:
© Kraks Forlag AS © D.A.V. © COWI 50 km KortFotoKombi CentrérPrintZoom
Allan Simonsen
Ordrer:
10001-004 - 350,86
10001-004 - 305,76
10001-004 - 250,41
1004-003 - 750,41
sum : 1657.44
Martin Jespersen
Ordrer:
1004525-003 - 250,41
1004525-003 - 246,41
1004525-002 - 246,41
1004525-002 - 476,31
sum : 1219.54
Med:
<xsl:template match="Kunder">
<xsl:apply-templates select="Kunde[not(Navn=preceding-sibling::Kunde/Navn)]" mode="OrderHead" />
</xsl:template>
<xsl:template match="Kunde" mode="OrderHead">
<br></br>
<xsl:variable name="Navn" select="Navn"></xsl:variable>
<xsl:value-of select="$Navn"/>
<br></br>
Ordrer:<br></br>
<xsl:for-each select="/Kunder//Kunde[$Navn = Navn]">
<xsl:value-of select="Ordrenr"/> - <xsl:value-of select="Ordre/Pris"/>
<br></br>
</xsl:for-each>
<xsl:variable name="TempSum">
<pris>
<xsl:for-each select="/Kunder/Kunde/Ordre//Pris[../../Navn = $Navn]">
<o>
<xsl:value-of select="translate(., ',', '.')"/>
</o>
</xsl:for-each>
</pris>
</xsl:variable>
sum : <xsl:value-of select="sum(msxml:node-set($TempSum)//o)"/>
</xsl:template>
Bemærk jeg bruger msxsl NS, da jeg skal lave et midlertidigt xml ark for at lave komma om til punktum.. Generelt er det BAD practice at formatere sit data dansk.
/J
Skrevet man. d. 17. maj 2010 kl. 00:41:01| #4
Beklager det sene tilbagemelding, men jeg må lige prøve dit forslag.
Smid bare et svar ind :)
Jeg er sikker på, jeg kan bygge videre på dit.
Skrevet man. d. 17. maj 2010 kl. 06:09:55| #5
ja, så lige at du også vil have dem grupperet efter ordre, sig til hvis det driller.
Skrevet man. d. 17. maj 2010 kl. 09:00:50| #6
Jeps. Jeg skriver lige, hvis det driller...XSLT er ikke min stærke side :S
Skrevet man. d. 17. maj 2010 kl. 09:10:19| #7
Hvordan skal starten af xslt'en se ud? Det er vel i den msxml namespacet skal angives?
Lige nu får jeg en ukendt fejl. :(
Skrevet man. d. 17. maj 2010 kl. 09:15:55| #8
xmlns:msxml="urn:schemas-microsoft-com:xslt"
Skrevet man. d. 17. maj 2010 kl. 09:27:07| #9
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="
http://www.w3.org/ (...)xmlns:msxml="urn:schemas-microsoft-com:xslt">
Med denne i toppen af xsl filen, giver den stadigvæk en fejl. xml filen er er velformet.
Iøvrigt kan jeg se på nettet, at der også er noget, der hedder msxsl:nodeset...
Skrevet man. d. 17. maj 2010 kl. 09:32:28| #10
ja msxml:node-set() ligger i det namespace..
Får du ikke en "fejl" ? smid evt lige et space mellem xmlns:xsl og xmlns:msxml
Skrevet man. d. 17. maj 2010 kl. 09:35:23| #11
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet [
<!ENTITY nbsp " ">
]>
<xsl:stylesheet
version="1.0"
xmlns:xsl="
http://www.w3.org/ (...) xmlns:msxml="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="msxml">
Skrevet man. d. 17. maj 2010 kl. 09:36:02| #12
msxml er afhængigt af miljø, hvis det ikke er en windows box, skal du nok finde et alternativ.
Skrevet man. d. 17. maj 2010 kl. 09:36:09| #13
Jeg fik det til at virke....
Skrevet man. d. 17. maj 2010 kl. 09:38:13| #14
Jeg prøver lige at gruppere informationer efter ordre...håber ikke jeg starter endnu et hæsblæsende xslt kodning forsøg :S
Skrevet man. d. 17. maj 2010 kl. 09:55:04| #15
Jeg kan se du har en <pris> tag defineret i html delen. Jeg går udfra det ikke er et krav...jeg vil nemlig kun ha' ren HTML ud. :)
Skrevet man. d. 17. maj 2010 kl. 10:02:24| #16
Den bruger jeg bare midlertidigt i den variable, den kommer ikke med ud.
Det er for at kunne iterere igennem priserne på ordrene og ligge dem sammen. Du har brugt komma til decimal, det skal være punktum, så i min variable erstatter jeg lige komma med punktum.
/J
Skrevet man. d. 17. maj 2010 kl. 10:54:30| #17
Ja, fandt ud af det bagefter :S
XSLT er vist ikke mig....
Skrevet man. d. 17. maj 2010 kl. 11:30:19| #18
du siger bare til hvis jeg skal gruppere de ordrer også..
Skrevet man. d. 17. maj 2010 kl. 12:25:18| #19
Du må gerne give det et shot :)
Skrevet man. d. 17. maj 2010 kl. 14:16:25| #20
Allan Simonsen
Ordrer:
10001-004:
211169-66, 01.02.2010, 350,86
211169-56, 01.02.2010, 305,76
211169-46, 01.02.2010, 250,41
order sum: 907.03
1004-003:
123869-18, 01.02.2010, 750,41
order sum: 750.41
total sum : 1657.44
Martin Jespersen
Ordrer:
1004525-003:
211169-46, 01.02.2010, 250,41
2119-460, 01.02.2010, 246,41
order sum: 496.82
1004525-002:
2119-460, 01.02.2010, 246,41
2119-461, 01.02.2010, 476,31
order sum: 722.72
total sum : 1219.54
<xsl:template match="Kunde" mode="OrderHead">
<br></br>
<xsl:variable name="Navn" select="Navn"></xsl:variable>
<h1>
<xsl:value-of select="$Navn"/>
</h1>
<h2>
Ordrer:
</h2>
<xsl:apply-templates select="/Kunder//Kunde[not(Ordrenr=preceding-sibling::Kunde/Ordrenr) and Navn = $Navn]" mode="Orders"></xsl:apply-templates>
<xsl:variable name="TempSum">
<pris>
<xsl:for-each select="/Kunder/Kunde/Ordre//Pris[../../Navn = $Navn]">
<o>
<xsl:value-of select="translate(., ',', '.')"/>
</o>
</xsl:for-each>
</pris>
</xsl:variable>
<br></br>
total sum : <xsl:value-of select="sum(msxml:node-set($TempSum)//o)"/><br></br>
</xsl:template>
<xsl:template match="Kunde" mode="Orders">
<xsl:variable name="Ordrenr" select="Ordrenr"></xsl:variable>
<h3>
<xsl:value-of select="$Ordrenr"/>:
</h3>
<xsl:apply-templates select="//Kunde[Ordrenr = $Ordrenr]" mode="OrderLine"></xsl:apply-templates>
<xsl:variable name="TempSum">
<pris>
<xsl:for-each select="/Kunder/Kunde/Ordre//Pris[../../Ordrenr = $Ordrenr]">
<o>
<xsl:value-of select="translate(., ',', '.')"/>
</o>
</xsl:for-each>
</pris>
</xsl:variable>
order sum: <xsl:value-of select="sum(msxml:node-set($TempSum)//o)"/>
</xsl:template>
<xsl:template match="Kunde" mode="OrderLine">
<xsl:value-of select="Ordre/ProduktId"/>, <xsl:value-of select="Ordre/SalgsDato"/>, <xsl:value-of select="Ordre/Pris"/>
<br></br>
</xsl:template>
Skrevet man. d. 17. maj 2010 kl. 14:17:29| #21
<xsl:template match="Kunder">
<xsl:apply-templates select="Kunde[not(Navn=preceding-sibling::Kunde/Navn)]" mode="OrderHead" />
</xsl:template>
Glemte lige den :)
Skrevet man. d. 17. maj 2010 kl. 15:21:39| #22
Tusinde tak ....jeg prøver...din hjælp har allerede være god. :)
Skrevet tir. d. 18. maj 2010 kl. 10:46:33| #23
Jeg har opdaget en lille ting, som ikke var tydelig for mig heller. Det viser sig, at et ordrenr godt kan være delt over fx to kunder (i mit eksempel giver det ikke mening, men det jeg arbejder med har med sagsbehandling at gøre, og en sagsbehandler kan godt være involveret i flere sager, som andre også har haft fingrene i). Dit xslt virker fint, men den springer de ordre numre over, som har forskellige kunder.
Eksempel:
<Kunde>
<Navn>Allan Simonsen</Navn>
<Ordrenr>1004-003</Ordrenr>
<Ordre>
<ProduktId>123869-18</ProduktId>
<SalgsDato>01.02.2010</SalgsDato>
<Pris>750,41</Pris>
</Ordre>
</Kunde>
<Kunde>
<Navn>Martin Jespersen</Navn>
<Ordrenr>1004-003</Ordrenr>
<Ordre>
<ProduktId>211169-46</ProduktId>
<SalgsDato>01.02.2010</SalgsDato>
<Pris>250,41</Pris>
</Ordre>
</Kunde>
Her kan du se, at der er forskellige kunder, men samme ordrenr. Den regner dog fint sammen alligevel, men informationerne kommer ikke frem. Jeg har selv forsøgt at smide denne regel ind, men har ikke haft held. :(
Det er vist i denne linje reglen skal lægges ind?
<xsl:apply-templates select="/Kunder//Kunde[not(Ordrenr=preceding-sibling::Kunde/Ordrenr) and Navn = $Navn]" mode="Orders" />
Skrevet tir. d. 18. maj 2010 kl. 10:48:40| #24
Reglen er: Så længe Kundenavn er forskellig, så skal ordrenr ikke grupperes for dem som een.
Skrevet tir. d. 18. maj 2010 kl. 10:53:31| #25
Altså ordrenr er ikke uniqt men en sammensat nøgle af ordrenummer og kundenavn ?
Skrevet tir. d. 18. maj 2010 kl. 10:54:23| #26
<xsl:apply-templates select="/Kunder//Kunde[Navn = $Navn]" mode="Orders" />
Skrevet tir. d. 18. maj 2010 kl. 11:00:25| #27
Jeps til det første. Prøver lige dit næste....tænkte på om man kunne kalde orderline med navn som parameter, hvori man kunne spørge om navnet var uens.
Skrevet tir. d. 18. maj 2010 kl. 11:10:35| #28
Det er noget værre bras af noget xml, jeg arbejder med. Preceding skal være med, så den er god nok... måske skal jeg lige redigere lidt id den xml du har:
<Kunder>
<Kunde>
<Navn>Allan Simonsen</Navn>
<Ordrenr>10001-004</Ordrenr>
<Ordre>
<ProduktId>211169-66</ProduktId>
<SalgsDato>01.02.2010</SalgsDato>
<Pris>350,86</Pris>
</Ordre>
</Kunde>
<Kunde>
<Navn>Allan Simonsen</Navn>
<Ordrenr>10001-004</Ordrenr>
<Ordre>
<ProduktId>211169-56</ProduktId>
<SalgsDato>01.02.2010</SalgsDato>
<Pris>305,76</Pris>
</Ordre>
</Kunde>
<Kunde>
<Navn>Allan Simonsen</Navn>
<Ordrenr>10001-004</Ordrenr>
<Ordre>
<ProduktId>211169-46</ProduktId>
<SalgsDato>01.02.2010</SalgsDato>
<Pris>250,41</Pris>
</Ordre>
</Kunde>
<Kunde>
<Navn>Allan Simonsen</Navn>
<Ordrenr>1004-003</Ordrenr>
<Ordre>
<ProduktId>123869-18</ProduktId>
<SalgsDato>01.02.2010</SalgsDato>
<Pris>750,41</Pris>
</Ordre>
</Kunde>
<Kunde>
<Navn>Martin Jespersen</Navn>
<Ordrenr>1004-003</Ordrenr>
<Ordre>
<ProduktId>211169-46</ProduktId>
<SalgsDato>01.02.2010</SalgsDato>
<Pris>250,41</Pris>
</Ordre>
</Kunde>
<Kunde>
<Navn>Martin Jespersen</Navn>
<Ordrenr>1004-003</Ordrenr>
<Ordre>
<ProduktId>2119-460</ProduktId>
<SalgsDato>01.02.2010</SalgsDato>
<Pris>246,41</Pris>
</Ordre>
</Kunde>
<Kunde>
<Navn>Martin Jespersen</Navn>
<Ordrenr>1004525-002</Ordrenr>
<Ordre>
<ProduktId>2119-460</ProduktId>
<SalgsDato>01.02.2010</SalgsDato>
<Pris>246,41</Pris>
</Ordre>
</Kunde>
<Kunde>
<Navn>Martin Jespersen</Navn>
<Ordrenr>1004525-002</Ordrenr>
<Ordre>
<ProduktId>2119-461</ProduktId>
<SalgsDato>01.02.2010</SalgsDato>
<Pris>476,31</Pris>
</Ordre>
</Kunde>
</Kunder>
Læg mærke til de to første Martin Jespersen forekomster vil blive sprunget over i den nuværende xslt. :S Det er fordi ordrenr er det samme hos Allan Simonsen og Martin Jespersen.
Jeg er ked af, at xml'en er meget udfordrende. Jeg har selv skrevet simple xslt'er, hvor xml data har været til at arbejde med. I det her tilfælde har udvikleren åbenbart skrevet xml genererings koden, så den passede til hans andet kode istedet for at strukturere den ordentligt.
Skrevet tir. d. 18. maj 2010 kl. 11:18:47| #29
Rækkefølgen vil altid være at dem med ens odrenr vil komme i forlængelse.
Skrevet tir. d. 18. maj 2010 kl. 11:20:10| #30
Som sagt så er beregnignen god nok....data bliver bare ikke vist :)
Skrevet tir. d. 18. maj 2010 kl. 11:38:59| #31
ja det ligner noget fra en doven udvikler, der blot har rippet tabellen fra sql som xml :)
jeg får lige kigget på det lidt senere :)..
Men vi er enige om at både martin og allan, skal have ordrenummeret:
1004-003 med unikke ordrelinier gældende for navn og ordrenummer
og så ellers som resultatet tidligere har været.
Skrevet tir. d. 18. maj 2010 kl. 11:50:56| #32
Ja, alt ser fint ud. Den regner fint sammen i den totale sum (selv på de usynlige forekomster). Den xml jeg pastet ind er meget lig med den generelle struktur. '1004-003' ordre nummeret skal fremgå både under Allan (det gør den fint lige nu), og under Martin (mangler), og ja til med unikke ordrelinjer for navn og ordrenummer.
Tusinde tak. Jeg kan evt. forhøje point tildelingen. :)
Skrevet tir. d. 18. maj 2010 kl. 12:30:51| #33
Evt. hvis det ikke er for meget...så kunne håndtere addition af store tal. Number er ikke stort nok :S
Jeg har tal her, der overstiger 50.000, negative tal skal også kunne håndteres, så det skal være signed.
Damn jeg ville ønske det var c#, jeg havde her :(
Skrevet tir. d. 18. maj 2010 kl. 12:52:51| #34
hehe ja det er ikke lige muligt i browseren, JS var også en effektiv mulighed hvis du hellere vil det.
Prøv lige med:
<xsl:apply-templates select="/Kunder/Kunde[not(Ordrenr=preceding-sibling::Kunde[$Navn = Navn]/Ordrenr) and $Navn = Navn]" mode="Orders"></xsl:apply-templates>
Før kiggede jeg efter preceding-sibling::Kunde, uden Navn kriterie, dvs at den efter at have mødt et ordrenummer, aldrig ville vise det igen. uanset navn.
Hvad siger du med numbers ? - har du noget xml der får det til at fejle ?
Skrevet tir. d. 18. maj 2010 kl. 12:56:22| #35
how nej, den tager sku en forkert ordre... hold on
Skrevet tir. d. 18. maj 2010 kl. 13:00:04| #36
<xsl:template match="Kunder">
<xsl:apply-templates select="Kunde[not(Navn=preceding-sibling::Kunde/Navn)]" mode="OrderHead" />
</xsl:template>
<xsl:template match="Kunde" mode="OrderHead">
<br></br>
<xsl:variable name="Navn" select="Navn"></xsl:variable>
<h1>
<xsl:value-of select="$Navn"/>
</h1>
<h2>
Ordrer:
</h2>
<xsl:apply-templates select="/Kunder/Kunde[not(Ordrenr=preceding-sibling::Kunde[$Navn = Navn]/Ordrenr) and $Navn = Navn]" mode="Orders">
<xsl:with-param name="Navn" select="$Navn"/>
</xsl:apply-templates>
<xsl:variable name="TempSum">
<pris>
<xsl:for-each select="/Kunder/Kunde/Ordre//Pris[../../Navn = $Navn]">
<o>
<xsl:value-of select="translate(., ',', '.')"/>
</o>
</xsl:for-each>
</pris>
</xsl:variable>
<br></br>
total sum : <xsl:value-of select="sum(msxml:node-set($TempSum)//o)"/><br></br>
</xsl:template>
<xsl:template match="Kunde" mode="Orders">
<xsl:param name="Navn"></xsl:param>
<xsl:variable name="Ordrenr" select="Ordrenr"></xsl:variable>
<h3>
<xsl:value-of select="$Ordrenr"/>:
</h3>
<xsl:apply-templates select="//Kunde[Ordrenr = $Ordrenr and $Navn = Navn]" mode="OrderLine"></xsl:apply-templates>
<xsl:variable name="TempSum">
<pris>
<xsl:for-each select="/Kunder/Kunde/Ordre//Pris[../../Ordrenr = $Ordrenr and ../../Navn = $Navn]">
<o>
<xsl:value-of select="translate(., ',', '.')"/>
</o>
</xsl:for-each>
</pris>
</xsl:variable>
order sum: <xsl:value-of select="sum(msxml:node-set($TempSum)//o)"/>
</xsl:template>
<xsl:template match="Kunde" mode="OrderLine">
<xsl:value-of select="Ordre/ProduktId"/>, <xsl:value-of select="Ordre/SalgsDato"/>, <xsl:value-of select="Ordre/Pris"/>
<br></br>
</xsl:template>
Tadaaa husk du kan sortere under hver <xsl:apply-template><xsl:sort/></xsl:template>
Hvis du skal have noget dato sortering på..
Ændre jeg en vare til at koste 60000 virker det stadig her, hvordan får jeg det "numbers" problem ?
/J
Skrevet tir. d. 18. maj 2010 kl. 13:00:33| #37
<xsl:template match="Kunder">
<xsl:apply-templates select="Kunde[not(Navn=preceding-sibling::Kunde/Navn)]" mode="OrderHead" />
</xsl:template>
<xsl:template match="Kunde" mode="OrderHead">
<br></br>
<xsl:variable name="Navn" select="Navn"></xsl:variable>
<h1>
<xsl:value-of select="$Navn"/>
</h1>
<h2>
Ordrer:
</h2>
<xsl:apply-templates select="/Kunder/Kunde[not(Ordrenr=preceding-sibling::Kunde[$Navn = Navn]/Ordrenr) and $Navn = Navn]" mode="Orders">
<xsl:with-param name="Navn" select="$Navn"/>
</xsl:apply-templates>
<xsl:variable name="TempSum">
<pris>
<xsl:for-each select="/Kunder/Kunde/Ordre//Pris[../../Navn = $Navn]">
<o>
<xsl:value-of select="translate(., ',', '.')"/>
</o>
</xsl:for-each>
</pris>
</xsl:variable>
<br></br>
total sum : <xsl:value-of select="sum(msxml:node-set($TempSum)//o)"/><br></br>
</xsl:template>
<xsl:template match="Kunde" mode="Orders">
<xsl:param name="Navn"></xsl:param>
<xsl:variable name="Ordrenr" select="Ordrenr"></xsl:variable>
<h3>
<xsl:value-of select="$Ordrenr"/>:
</h3>
<xsl:apply-templates select="//Kunde[Ordrenr = $Ordrenr and $Navn = Navn]" mode="OrderLine"></xsl:apply-templates>
<xsl:variable name="TempSum">
<pris>
<xsl:for-each select="/Kunder/Kunde/Ordre//Pris[../../Ordrenr = $Ordrenr and ../../Navn = $Navn]">
<o>
<xsl:value-of select="translate(., ',', '.')"/>
</o>
</xsl:for-each>
</pris>
</xsl:variable>
order sum: <xsl:value-of select="sum(msxml:node-set($TempSum)//o)"/>
</xsl:template>
<xsl:template match="Kunde" mode="OrderLine">
<xsl:value-of select="Ordre/ProduktId"/>, <xsl:value-of select="Ordre/SalgsDato"/>, <xsl:value-of select="Ordre/Pris"/>
<br></br>
</xsl:template>
Skrevet tir. d. 18. maj 2010 kl. 13:34:00| #38
Wow var lige væk...ja, jeg fik nogle problemer med NaN i ialt, jeg har efterfølgende flyttet data over i et regneark og lagt kollonnen sammen, og kunne konstatere at det blev over 50k...så jeg tænkte det måske var max værdien af number, jeg havde ramt...jeg tester lige.. :)
Skrevet tir. d. 18. maj 2010 kl. 13:49:18| #39
Narj det tror jeg ikke, vurder lige om dit data er korrekt, jeg formoder at det bare er XXXXXXXX,XX formatet er..
Kommer der nogle med ex : XXX.XXX,XX vil det fejle ?
Vh.
Skrevet tir. d. 18. maj 2010 kl. 13:59:04| #40
DING DING DING....
Succes...
Det virker...damn du er en xslt wizz...det med tallene er nok et andet problem...har selv lige prøvet med min egen lille simpliceret xml....det er nok data, der er noget galt med...
Wow...hvordan har du lært alt det her xslt...jeg er nu mest til serverside programmering :S
Skrevet tir. d. 18. maj 2010 kl. 13:59:58| #41
Formatet jeg skriver resultaterne nu i ->
format-number(sum(msxml:node-set($TempSum)//o), '#.##')
Skrevet tir. d. 18. maj 2010 kl. 15:06:36| #42
Smid den her i toppen :)
<xsl:decimal-format name="DKK" decimal-separator="," grouping-separator="."/>
og brug
format-number(sum(msxml:node-set($TempSum)//o), '###.###', 'DKK')
Jeg arbejder til dagligt med xslt, får xml fra alle tænkelige steder, så har lidt erfaring efter 4-5 år.. Lidt stejl indlæringskurve, men der er SLET ikke ret langt til toppen, redskaberne er utroligt simple, så det er ofte kun xpath der er problemet.
Skrevet tir. d. 18. maj 2010 kl. 20:40:23| #43
Det hjalp...nu bliver alle tallene lagt fint sammen....mange tak for en yderst kompetent xslt "rådgivning".
You are the man!