Sortieren von Zahlenwerten mit vorangestelltem Euro-Zeichen
jürgi
- xsl
0 Cheatah0 jürgi0 Gunnar Bittersmann0 jürgi0 Gunnar Bittersmann0 ThomasM0 jürgi
0 MudGuard
...einmal mehr ich mit ner kleinen frage. ;-)
ich möchte meine xml-datei bei der ausgabe nach html sortieren. dabei soll aufsteigend nach dem preis sortiert werden. das klappt auch schon ganz gut bei dreistelligen preisen (z.B. € 899). sobald eine vierte stelle hinzukommt (z.B. € 1019) wird dieses information an erster stelle gebracht. dann jedoch wird aufsteigend sortiert!
ich vermute, das liegt an dem euro-symbol aber leider hab ich bis jetzt noch nicht herausgefunden, warum!
grüße
der jürgi
mein xsl:
...
<xsl:template match="root">
<root>
<xsl:apply-templates select="waschmaschine">
<xsl:sort select="preis" data-type="text" order="ascending"/>
</xsl:apply-templates>
</root>
</xsl:template>
<xsl:template match="waschmaschine">
<xsl:copy-of select="."/>
</xsl:template>
...
______________________________
meine xml:
<root>
<waschmaschine>
<hersteller>AEG</hersteller>
<typ>LAVAMAT 6261</typ>
Beschreibung: <beschreibung>Waschvollautomat mit 1200 U/min, Waschwirkungsklasse A, 6 kg Fassungsvermögen.Vollelektronische Ein-Knopf-Programmsteuerung für einfachste Bedienung.</beschreibung>
Bestellnummer: <bestellnummer>ae0023154</bestellnummer>
Preis: <preis currency="Euro">€ 479</preis>
<preis_visual>€ 479</preis_visual>
<foto href="file:///K:/Waschmaschinen/24469_g.jpg"></foto>
</waschmaschine>
<waschmaschine>
...
Hi,
ich vermute, das liegt an dem euro-symbol aber leider hab ich bis jetzt noch nicht herausgefunden, warum!
die Zeichenkette "€ 8" ist größer als "€ 1", also braucht man keine weiteren Text(!)zeichen zu betrachten. Wenn Du Zahlen vergleichen willst, musst Du zunächst den Text in etwas umwandeln, dass als Zahl durchgeht.
Cheatah
hi cheatah!
...dann müsste doch der wert "€ 1019" größer als "€ 999" sein und demnach als letzter kommen, wenn ich aufsteigend sortiere?!
grüße
der jürgi
Hi,
ich vermute, das liegt an dem euro-symbol aber leider hab ich bis jetzt noch nicht herausgefunden, warum!
die Zeichenkette "€ 8" ist größer als "€ 1", also braucht man keine weiteren Text(!)zeichen zu betrachten. Wenn Du Zahlen vergleichen willst, musst Du zunächst den Text in etwas umwandeln, dass als Zahl durchgeht.
Cheatah
@@jürgi:
nuqneH
hi cheatah!
...dann müsste doch der wert "€ 1019" größer als "€ 999" sein und demnach als letzter kommen, wenn ich aufsteigend sortiere?!
Nein. "Quickie" steht im Wörterbuch auch vor "Quietscheentchen".
Bei Stringvergleichen geht es von links nach rechts*:
"Q" bei beiden gleich, also nächsten Buchstaben anschauen
"u" bei beiden gleich, also nächsten Buchstaben anschauen
"i" bei beiden gleich, also nächsten Buchstaben anschauen
"c" kommt vor "e", also "Quickie" vor "Quietscheentchen"
Entsprechend:
"€" bei beiden gleich, also nächstes Zeichen anschauen
" " bei beiden gleich, also nächstes Zeichen anschauen
"1" kommt vor "9", also "€ 1019" vor "€ 999"
Qapla'
* arabische, hebräische u.a. Von-rechts-nach-links-Schriften ausgenommen
hallo gunnar!
..danke für die info - jetzt hab ich's auch kapiert! :o) kennst du eine lösung, wie man dennoch die preise aufsteigend sortieren lassen kann?
danke und gruß
der jürgi
@@jürgi:
nuqneH
hi cheatah!
...dann müsste doch der wert "€ 1019" größer als "€ 999" sein und demnach als letzter kommen, wenn ich aufsteigend sortiere?!
Nein. "Quickie" steht im Wörterbuch auch vor "Quietscheentchen".
Bei Stringvergleichen geht es von links nach rechts*:
"Q" bei beiden gleich, also nächsten Buchstaben anschauen
"u" bei beiden gleich, also nächsten Buchstaben anschauen
"i" bei beiden gleich, also nächsten Buchstaben anschauen
"c" kommt vor "e", also "Quickie" vor "Quietscheentchen"Entsprechend:
"€" bei beiden gleich, also nächstes Zeichen anschauen
" " bei beiden gleich, also nächstes Zeichen anschauen
"1" kommt vor "9", also "€ 1019" vor "€ 999"Qapla'
* arabische, hebräische u.a. Von-rechts-nach-links-Schriften ausgenommen
@@jürgi:
nuqneH
..danke für die info - jetzt hab ich's auch kapiert! :o) kennst du eine lösung, wie man dennoch die preise aufsteigend sortieren lassen kann?
"€ " vorn abschneiden [XPATH §3.6], den Rest numerisch sortieren [XSLT10 §10]
Qapla'
PS: Bitte kein TOFU!
Hallo Jürgi,
kennst du eine lösung, wie man dennoch die preise aufsteigend sortieren lassen kann?
<xsl:sort select="number(substring-after(preis,'€ '))" data-type="number" order="ascending"/>
Grüße,
Thomas
Hallo Thomas,
<xsl:sort select="number(substring-after(preis,'€ '))" data-type="number" order="ascending"/>
»»
danke, du bist mein retter! :-)
Schönen Abend und liebe Grüße
Jürgen
Hi,
[code lang=xml]<root>
<waschmaschine>
<hersteller>AEG</hersteller>
<typ>LAVAMAT 6261</typ>
Beschreibung: <beschreibung>Waschvollautomat mit 1200 U/min, Waschwirkungsklasse A, 6 kg Fassungsvermögen.Vollelektronische Ein-Knopf-Programmsteuerung für einfachste Bedienung.</beschreibung>
Wieso steht hier Beschreibung: vor dem beschreibung-Element im xml? Ist doch überflüssig.
(Mixed content, d.h. Elemente, die sowohl Text als auch Kind-Elemente enthalten, würde ich sowieso zu vermeiden versuchen, wann immer es geht).
Wenn das "Beschreibung:" in der Ausgabe benötigt wird, gehört das m.E. in die Transformation, aber nicht in die Datenquelle ...
Bestellnummer: <bestellnummer>ae0023154</bestellnummer>
Dito.
Preis: <preis currency="Euro">€ 479</preis>
Dito.
Und die Währung ist auch gleich doppelt angegeben - einmal im currency-Attribut, einmal im Textknoten. Warum? Laß die zweite Angabe weg - dafür hast Du doch eh schon das (m.E. überflüssige):
<preis_visual>€ 479</preis_visual>
M.E. wäre es, wenn irgendwie möglich, am sinnvollsten, das xml erstmal aufzuräumen.
Als Nebenwirkung erledigt sich Dein Problem, da im preis-Element dann nur noch die Zahl drinsteht ...
cu,
Andreas