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

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

AW: Zahlenwerte in XML (Decimalseparator)

  Alt 16. Dez 2013, 16: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.199 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Zahlenwerte in XML (Decimalseparator)

  Alt 17. Okt 2014, 11: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
Dejan Vu
(Gast)

n/a Beiträge
 
#3

AW: Zahlenwerte in XML (Decimalseparator)

  Alt 17. Okt 2014, 12:27
Hab mir deinen Kreuzpfosten angeschaut: Das XML ist aber valide.
Code:
<rootNode>
  <invalidContent>3,14159265358979</invalidContent>
</rootNode>
Nur die *Intention* ist ja eine andere, nämlich die: Du hast ein Schema und willst die Delphi XML-Datenbindung verwenden.
Code:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="rootNode">
    <xs:complexType>
      <xs:sequence>
        <xs:element type="xs:float" name="invalidContent"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
Delphi-Quellcode:
Der Delphi-Code dazu:
IXMLRootNode = interface(IXMLNode)
    ['{323E65B5-3A1C-4937-8413-91430DC19316}']
    { Property Accessors }
    function Get_InvalidContent: Single;
    procedure Set_InvalidContent(Value: Single)
    { Methods & Properties }
    property InvalidContent: Single read Get_InvalidContent write Set_InvalidContent;
  end;

{ Forward Decls }

  TXMLRootNode = class;

{ TXMLRootNode }

  TXMLRootNode = class(TXMLNode, IXMLRootNode)
  protected
    { IXMLRootNode }
    function Get_InvalidContent: Single;
    procedure Set_InvalidContent(Value: Single);
  end;
Und wenn Du nun ausführst:
Delphi-Quellcode:
var
  node : IXMLRootNode;

begin
  node := NewrootNode;
  node.InvalidContent := Pi;
  memo1.Lines.text := node.XML;
end;
Hast Du -et voilá- ein XML, was nicht gegen das Schema validiert werden kann. Und *DAS* ist ein Bug.

Das geht natürlich auch mit Datumse. Is ja klar.
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Zahlenwerte in XML (Decimalseparator)

  Alt 17. Okt 2014, 12:40
Ja, "XML not valid" ist falsch ausgedrückt. Es ist immer noch well formed, aber nicht mehr gegen ein Schema validierbar was hier einen Float erwartet.

Ich ändere das wohl noch, nicht dass mich da jemand falsch verstehen will
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#5

AW: Zahlenwerte in XML (Decimalseparator)

  Alt 17. Okt 2014, 14:32
Nee, aber da wird immer so viel durcheinander gebracht und in diesem Hochspezialistenforum wollen wir doch bei dieser Kerntechnologie korrekte Bezeichnungen verwenden.

Vor allen Dingen ist man bei einer Hotline oder einem Supportforum wie bei Emba gerne darauf aus, solche Kinkerlitzchen zum Anlass zu nehmen, die Sache abzubügeln: "Wieso? Ist doch valide!" => kein Fehler => gelöscht.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.877 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Zahlenwerte in XML (Decimalseparator)

  Alt 17. Okt 2014, 14:37
Hier ist aber nicht er EMBT Support. Anhand des Betreffs sollte eigentlich klar sein, was gemeint war.
Markus Kinzler
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Zahlenwerte in XML (Decimalseparator)

  Alt 29. Okt 2014, 10:15
Embarcaderos neues(?) Forum ist leider vollkommen tot, das interessiert dort niemanden.

Deshalb habe ich es in Embarcaderos neues QC eingetragen. Für den Fall dass es nicht als "as designed" abgestempelt wird gebe ich Bescheid wenn das Volk Voten darf
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz