AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi Zahlenwerte in XML (Decimalseparator)
Thema durchsuchen
Ansicht
Themen-Optionen

Zahlenwerte in XML (Decimalseparator)

Ein Thema von HenryE · begonnen am 13. Aug 2009 · letzter Beitrag vom 29. Okt 2014
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.020 Beiträge
 
Delphi 12 Athens
 
#11

Re: Zahlenwerte in XML (Decimalseparator)

  Alt 13. Aug 2009, 18:28
Zitat von alzaimar:
Ich formatiere/konvertiere meine Float-Werte in/aus XML gnadenlos selbst. Eine bessere Idee habe ich auch nicht.
aus diesem Grund hab ich intern auch angefangen den Variant selber auseinander zunehmen und dort dann möglichst konforme Typumwandlungen vorzunehmen.
aber wenn man bedenkt, was alles so in einen Variant reinpaßt
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
HenryE

Registriert seit: 21. Mär 2007
14 Beiträge
 
Delphi 10.4 Sydney
 
#12

Re: Zahlenwerte in XML (Decimalseparator)

  Alt 13. Aug 2009, 18:28
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.
Henry
  Mit Zitat antworten Zitat
HenryE

Registriert seit: 21. Mär 2007
14 Beiträge
 
Delphi 10.4 Sydney
 
#13

Re: Zahlenwerte in XML (Decimalseparator)

  Alt 13. Aug 2009, 18:33
Zitat:
aus diesem Grund hab ich intern auch angefangen den Variant selber auseinander zunehmen und dort dann möglichst konforme Typumwandlungen vorzunehmen
kann man sich denn elegant in die Variant-Typ-Umwandlungen einhängen. Irgendwie mittels Callback?
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.
Henry
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.020 Beiträge
 
Delphi 12 Athens
 
#14

Re: Zahlenwerte in XML (Decimalseparator)

  Alt 13. Aug 2009, 18:48
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
HenryE

Registriert seit: 21. Mär 2007
14 Beiträge
 
Delphi 10.4 Sydney
 
#15

Re: Zahlenwerte in XML (Decimalseparator)

  Alt 13. Aug 2009, 18:53
Das scheint mir recht aufwendig zu sein. Irgendwie muß das anders gehen. Irgendwas muß mir da einfallen...
Aber Danke schonmal für Eure Anteilnahme.
Henry
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.155 Beiträge
 
Delphi 10 Seattle Enterprise
 
#16

AW: Zahlenwerte in XML (Decimalseparator)

  Alt 16. Dez 2013, 14:26
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:
IXMLDocument::NodeValue nimmt ein OleVariant entgegen welches im Falle einer Kommazahl direkt mit den globalen FormatSettings umgewandelt wird. Ich finde keine Möglichkeit, ein eigenes TFormatSettings -Objekt irgendwo reinzustecken.

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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.020 Beiträge
 
Delphi 12 Athens
 
#17

AW: Zahlenwerte in XML (Decimalseparator)

  Alt 16. Dez 2013, 14:42
Im Prinzip müsste die Umwandlung dort explizit ein englischsprachisches FormatSettings benutzen.

Oder du wandelst die Zahl selber um. (FloatToStr + eigenes FormatSettings)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.155 Beiträge
 
Delphi 10 Seattle Enterprise
 
#18

AW: Zahlenwerte in XML (Decimalseparator)

  Alt 16. Dez 2013, 17:11
Müsste, ja. Tut sie aber nicht

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
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#19

AW: Zahlenwerte in XML (Decimalseparator)

  Alt 16. Dez 2013, 17:20
Eben weil Delphi-Referenz durchsuchenIXMLNode.NodeValue ein Delphi-Referenz durchsuchenOleVariant 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 Delphi-Referenz durchsuchenTCustomIniFile
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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.155 Beiträge
 
Delphi 10 Seattle Enterprise
 
#20

AW: Zahlenwerte in XML (Decimalseparator)

  Alt 17. Okt 2014, 12:00
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...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16: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