XML/XSL und Zahlenformat

fluppi_one

Grünschnabel
Hallo,

ich habe leider ein kleines Problem beim Umwandeln bzw. herausfiltern von Daten aus einem XML-File. Alles funktioniert wunderbar, bis auf folgendes:

Ich bekomme Zahlen z.B. im Format:

<VALUE>115</VALUE>
<NUMOFDEC>2</NUMOFDEC> und

möchte das ganze umwandeln, so dass ich den Wert mittels xsl
in 1.15 bekomme.

Wie könnte ich das ganze hinbekommen?

Gruß Florian
 
Hi.

Könntest du so machen:
XML:
<xsl:value-of select="format-number(concat(VALUE, 'e-', NUMOFDEC), '#0.0#')" />
Gruß
 
Zuletzt bearbeitet von einem Moderator:
Hmm,

danke, aber scheint leider nicht zu funktionieren.
Als Ergebnis erhalte ich immer den Wert NaN .


XML:
- <POORDERLIN>
+ <QUANTITY qualifier="ORDERED">
  <VALUE>5</VALUE> 
  <NUMOFDEC>0</NUMOFDEC> 
  <SIGN>+</SIGN> 
  <UOM>CT</UOM> 
  </QUANTITY>
- <OPERAMT qualifier="UNIT" type="T">
  <VALUE>11125</VALUE> 
  <NUMOFDEC>3</NUMOFDEC> 
  <SIGN>+</SIGN> 
  <CURRENCY>EUR</CURRENCY> 
  <UOMVALUE>1</UOMVALUE> 
  <UOMNUMDEC>0</UOMNUMDEC> 
  <UOM>CT</UOM>
Hier steht der Wert drin....
Ich leite den "Baum" mit

<xsl:for-each select="DATAAREA[1]/PROCESS_PO[1]/POORDERLIN">
ein

Dann habe ich Deinen Wert mit eingebaut:
...

<xsl:for-each select="OPERAMT[1]">
<xsl:value-of select="format-number(concat(VALUE, 'e-', NUMOFDEC), '#0.0#')" />
</xsl:for-each>

Und heraus kommt besagtes NaN.

Alles andere wird sonst einwandfrei konvertiert....

EDIT: Also es muss an dem Befehl format-number liegen... Lass ich Ihn weg bekomm ich z.B. 11125 -e raus. Also findet er die Daten...
 
Zuletzt bearbeitet von einem Moderator:
Also bei mir wird für dein Beispiel erwartungsgemäß 11.13 ausgegeben.

Wenn ich den format-number Aufruf weg lasse, wird erwartungsgemäß 1125e-3 ausgegeben - es ist mir unverständlich wie bei dir 1125-e herauskommen kann?! Kann es sein das du den Code doch nicht richtig übernommen hast? Welchen XSLT Prozessor verwendest du denn?

Gruß

PS: Bitte verwende für Code den du postest die entsprechenden Code-Tags - für XML also [code=xml]...[/code].
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

ich habe glaub ich den Fehler gefunden.
Ich wandel das ganze unter JAVA (Linux) um.XSLT-Prozessor ist xalan

Ich müsste doch eigentlich in der xsl-Datei einen Wert
ála

XML:
<xsl:decimal-format name="european" decimal-separator="." grouping-separator="."/>

eintragen oder?
 
Zuletzt bearbeitet von einem Moderator:
Das xsl:decimal-format Element definiert nur das Standardformat für die Ausgabe von Dezimalzahlen. Du solltest da nicht das gleiche Zeichen als Tausendertrennzeichen und Dezimaltrennzeichen verwenden (obwohl das vermutlich funktioniert - ist aber bestenfalls irreführend).

Das Problem ist, das bei dir keine korrekte Gleitkommazahl beim Zusammenbauen entsteht.

Wenn bei dir wirklich der String "11125 -e" herauskommt (Wo kommt da das Leerzeichen her? Wieso steht das Minus vor dem e?) dann schlägt die Umwandlung in eine Zahl natürlich fehl.

Gruß
 
Hmm,

also ich habe Deinen Code jetzt direkt nochmal eingefügt

Verpackungseinheit 2.500Bl|5|CT|NaN|1|||

Dort, wo NaN steht, sollte eigentlich 11,13€ stehen. Tut es leider nur nicht.
Ich fürchte, das hier das "e-" falsch interpretiert wird.

Und ich weiss leider nicht woran das liegt. Lass ich das "e-" weg schreibt er die Zahlen hin (die ich natürlich so nicht gebrauchen kann...)
 
Dort, wo NaN steht, sollte eigentlich 11,13€ stehen. Tut es leider nur nicht.
Ich fürchte, das hier das "e-" falsch interpretiert wird.

Und ich weiss leider nicht woran das liegt.
Das ist mir schon klar. Deshalb hab ich dir ja auch ein paar Fragen gestellt - du erzählst mir aber nur wieder das es nicht funktioniert :rolleyes:

Was kommt denn heraus wenn du "format-number('1115e-5', '##0.0####')" fest in das select Attribut schreibst?

Was genau kommt heraus wenn du den format-number Aufruf wegläßt?

Gruß
 
Zuletzt bearbeitet:
Ok,

also hier mal folgende Ergebnisse:
1.) Ohne format-number

XML:
<xsl:value-of select="concat(VALUE, 'e-', NUMOFDEC)" />

wird es in
Verpackungseinheit 2.500Bl|5|CT|11125e-3|1|||

umgewandelt

2.) format-number direkt in select-Attribut ergibt als Ergebnis

Verpackungseinheit 2.500Bl|5|CT|NaN|1|||
 
Zuletzt bearbeitet von einem Moderator:
Ok, so kommen wir schon weiter.

Welche Version von Xalan ist das denn? Ist das schon ein XSL 2.0 Stylesheet/Prozessor?

Was kommt heraus wenn du "number(concat(VALUE, 'e-', NUMOFDEC))" hinschreibst? Oder "xs:double(concat(VALUE, 'e-', NUMOFDEC))"?

Gruß
 

Neue Beiträge

Zurück