![]() |
TXMLDocument encoding wird nicht korrekt geschrieben
Liebe Leute,
ich habe zur Zeit ein etwas merkwürdiges Verhalten bei meiner TXMLDocument festgestellt, aber zunächst meinen Code:
Delphi-Quellcode:
Wenn ich diesen Code ausführe und mir anschließend die XML anschaue, so steht in dieser nur folgendes:
procedure TMain_Form.CreateXMLClick(Sender: TObject);
var newHead, newSub: IXMLDOMNode; fAppPath: String; LDocument: IXMLDocument; LNodeElement, NodeCData, NodeText: IXMLNode; begin fAppPath := ExtractFilePath(ParamStr(0)) + 'tmp\'; LDocument := TXMLDocument.Create(nil); LDocument.Active := True; LDocument.LoadFromXML ('<?xml version="1.0" encoding="UTF-8"?>' + '<TestElement>Inner text</TestElement>'); LDocument.DocumentElement := LDocument.CreateNode('cnpsXML', ntElement, ''); LDocument.DocumentElement.Attributes['ProjectID.DWD'] := '161428257'; LDocument.DocumentElement.Attributes['CreatedByAppVersion'] := '3.20.0'; LDocument.SaveToFile(fAppPath + 'test.xml'); end;
Code:
Wenn ich statt encoding=UTF-8 einfach UTF-16 schreibe, so wird dieses korrekt übertragen.
<?xml version="1.0"?>
<cnpsXML ProjectID.DWD="161428257" CreatedByAppVersion="3.20.0"/> Kann mir jemand sagen, wo der Fehler liegt? Schöne Grüße und besten Dank! |
AW: TXMLDocument encoding wird nicht korrekt geschrieben
UTF-8 ist der Standard ... ist sonst nix Anderes angegeben, dann ist jede XML immer UTF-8.
Und Standardwerte muß man nicht unbedingt speichern. (spart Platz/Speicher) Mich wundert da schon eher, daß dein TestElement fehlt. :stupid: |
AW: TXMLDocument encoding wird nicht korrekt geschrieben
Ah ok, hätte ich auch vorher drauf kommen können.
Danke :) Edit: das mit dem Testelement ist mir auch schon aufgefallen, aber irgendwie scheint der immer nur den letzten Knoten im Quellcode zu schreiben... :( |
AW: TXMLDocument encoding wird nicht korrekt geschrieben
Zitat:
Aber da hätte ich dann wenigstens eine Fehlermeldung erwartet, wenn man mehr einbaut. |
AW: TXMLDocument encoding wird nicht korrekt geschrieben
Okay, aber wie soll man denn bitte die folgende Struktur erstellen, wenn man mit CreateNode nur den Root Knoten erstellen kann?
Code:
Denn AddChild ist für mich nur ein Datensatz, wie z.B. ModuleData, oder liege ich da falsch? (Hab bisher noch nie mit Delphi und XML in Kombination gearbeitet, sollte man wohl dazu sagen...)
<?xml version="1.0" encoding="UTF-8"?>
<cnpsXML ProjectID.DWD="161428257" CreatedByAppVersion="3.20.0"> <Sources> <Module_0 Inpoint.QWD="-1" Outpoint.QWD="-1" Duration.QWD="4976100000" MultiSource.DWD="1"> <ModuleData> <StreamTypeTable StreamSelector_0.DWD="0" StreamType_0.DWD="0" StreamPtr_0.DWD="0" StreamSelector_1.DWD="2" StreamType_1.DWD="0" StreamPtr_1.DWD="0"/> <SourceModules> <MultiSrcModule_0 MultiSource.DWD="0" Filename="E:\failed\20120503115047.MTS" CreatorMachine="TR2" CreatorUser="Administrator" FullUNCFilename="\\TR2\failed\20120503115047.MTS"> <ModuleData m_rFrameRateOverride.DBL="50.000000" AspectRatio.BIN="AQAAAAEAAAA=" PixelAspect_X.DWD="1" PixelAspect_Y.DWD="1" audio_combine_streams.DWD="0" audio_stream_id.DWD="4352"/> </MultiSrcModule_0> </SourceModules> </ModuleData> <Filter_0/> <Filter_1/> </Module_0> </cnpsXML> |
AW: TXMLDocument encoding wird nicht korrekt geschrieben
*
XML-Code:
erstellen
<?xml version="1.0" encoding="UTF-8"?>
<cnpsXML/> * die Parameter für den Rootknoten setzen * Unterknoten erstellen Oder du erstellst ein Dokument, anstatt etwas zu laden (LoadFromXML).
XML-Code:
XML := TXMLDocument.Create(nil);
XML.DOMVendor := 'MS-XML-DOM'; XML.Active := True; XML.Version := '1.0'; XML.StandAlone := 'yes'; XML.Encoding := 'UTF-8'; XML.AddChild('cnpsXML'); ... |
AW: TXMLDocument encoding wird nicht korrekt geschrieben
Hallo
Möchte das Thema nochmals hochholen. Zitat:
Gruss Robert |
AW: TXMLDocument encoding wird nicht korrekt geschrieben
Ich glaub man kann irgendwie auf den Prozessingknoten zugreifen, dann könnte man diese Attribute manuell eintragen.
|
AW: TXMLDocument encoding wird nicht korrekt geschrieben
Da ich gerade vor genau dem selben Problem stand, hier die Lösung:
Delphi-Quellcode:
Der Kniff ist, dass sich TXMLDocument unterschiedlich verhält, je nachdem, welchen String-Typ man an SaveToXML übergibt.
procedure TForm1.btn1Click(Sender: TObject);
var S, Encoding: string; S8: UTF8String; XML: IXMLDocument; begin Encoding := 'UTF-8'; // ASCII, ISO-8859-1, UTF-8, UTF-16 XML := TXMLDocument.Create(Nil); XML.Active := True; XML.Encoding := Encoding; if Encoding = 'UTF-16' then begin XML.SaveToXML(S); Memo1.Lines.Add(S); end else begin XML.SaveToXML(S8); Memo1.Lines.Add(string(S8)); end; end; Vermutlich verhält sich das auch noch unterschiedlich, je nachdem ob man mit einem NEXTGEN-Compiler (D2009+) oder einem alten arbeitet. Hier getestet mit 10.2.3 Tokyo. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 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