Re: Zahlenwerte in XML (Decimalseparator)
Zitat:
aber wenn man bedenkt, was alles so in einen Variant reinpaßt :freak: |
Re: Zahlenwerte in XML (Decimalseparator)
Hm! Ich glaube, das Problem liegt in diesem Fall wirklich bei MS. Ich habe Fehlermeldungen gefunden, die im Zusammenhang mit BizTalk und XML genau das selbe Problem beschrieben.
|
Re: Zahlenwerte in XML (Decimalseparator)
Zitat:
Auch wenn ich wirklich keine Lust darauf habe, aber vielleicht könnte das was für einen Würg-Around sein. Aber ich glaube, dann würde ich eher mittels XSLT eine Umformung machen und dort den gerade aktuelle gültigen Decimal-Trenner einfügen. Ich weiß auch nicht. Das ist ega so ein Gewurschtel. Das mag ich überhaupt nicht. :-) |
Re: Zahlenwerte in XML (Decimalseparator)
Man könnte sich da zwar direkt in den Variant reinhängen, aber dann gibt es wieder das Problem, daß diese Umwandlung auch programmweit wirksam wäre und nicht nur im XML-Teil.
Ich hab es deßhalb so gelösßt, daß im XML die Umwandlung XML-String<>Variant manuell gemacht wird, also geschaut was in dem Variant drin steckt und dann entsprechende Umwabdlungen nur innerhalb der XML-Klasse vorgenommen werden. |
Re: Zahlenwerte in XML (Decimalseparator)
Das scheint mir recht aufwendig zu sein. Irgendwie muß das anders gehen. Irgendwas muß mir da einfallen...
Aber Danke schonmal für Eure Anteilnahme. |
AW: Zahlenwerte in XML (Decimalseparator)
Ganz bewusst buddele ich das Thema von 2009 wieder aus. Ich bin hilflos. Ich finde noch nicht mal einen QC-Eintrag. Im Emba-Forum ein Thema aus 2012.
Gab es genau die selbe Geschichte nicht neulich nochmal mit JSON? Ich bin immer noch ratlos, was ich jetzt tun muss, damit Kommazahlen als "3.14" und nicht "3,14" in meinem XML landen. Zusammenfassung:
Delphi-Quellcode:
nimmt ein
IXMLDocument::NodeValue
Delphi-Quellcode:
entgegen welches im Falle einer Kommazahl direkt mit den globalen
OleVariant
Delphi-Quellcode:
umgewandelt wird. Ich finde keine Möglichkeit, ein eigenes
FormatSettings
Delphi-Quellcode:
-Objekt irgendwo reinzustecken.
TFormatSettings
Ich kann also nur die globalen FormatSettings anpassen? Gibt es irgendwo einen Bug-Report? Es kann doch nicht sein, dass hier ungültiges XML rauskommt :evil: |
AW: Zahlenwerte in XML (Decimalseparator)
Im Prinzip müsste die Umwandlung dort explizit ein englischsprachisches FormatSettings benutzen.
Oder du wandelst die Zahl selber um. (FloatToStr + eigenes FormatSettings) |
AW: Zahlenwerte in XML (Decimalseparator)
Müsste, ja. Tut sie aber nicht :roteyes:
Mal sehen, was sich mit einem Helper da bessern lässt. Ach warte, geht ja nicht für Interfaces (IXMLNode). Ja, heute ist Stinkstiefel-Tag |
AW: Zahlenwerte in XML (Decimalseparator)
Eben weil IXMLNode.NodeValue ein OleVariant ist, nehme ich das Lesen (!) und Schreiben lieber selber in die Hand. Denn dort kann ja eben alles stehen.
Also warum nicht so wie bei TCustomIniFile
Delphi-Quellcode:
TNodeValueHandler = class
private FFormat : TFormatSettings; public procedure WriteString( Node : IXMLNode; const Value : string ); procedure WriteFloat( Node : IXMLNode; const Value : Extended ); ... function ReadString( Node : IXMLNode; const Default : string ) : string; function ReadFloat( Node : IXMLNode; const Default : Extended ) : Extended; ... end; procedure TNodeValueHandler.WriteString( Node : IXMLNode; const Value : string ); begin Node.NodeValue := Value; end; procedure TNodeValueHandler.WriteFloat( Node : IXMLNode; const Value : Extended ); begin WriteString( Node, FloatToStr( Value, FFormat ) ); end; function TNodeValueHandler.ReadString( Node : IXMLNode; const Default : string ) : string; begin Result := VarToStrDef( Node.NodeValue, Default ); end; function TNodeValueHandler.ReadFloat( Node : IXMLNode; const Default : Extended ) : Extended; begin Result := StrToFloatDef( ReadString( Node, '' ), Default ); end; |
AW: Zahlenwerte in XML (Decimalseparator)
Ich habe durch Zufall
Soap.XSBuiltIns.SoapFloatToStr(Value: double): string; gefunden. In der Unit gibt es noch mehr, wie beispielsweise auch XML-konforme Umwandlung von und in TDateTime :-) Bei der Gelegenheit auch gleich einen Kreuzpfosten in Embarcaderos neuem Forum aufgemacht. Ich finde, das sollte nicht nötig sein. Wenn man sich den Code von TXMLNode.SetNodeValue ansieht, konvertieren die sogar ein "True" nach "true" damit es XML-conform ist. Aber Kommazahlen haben die irgendwie vergessen... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz