![]() |
XML: Kopieren einer kompletten XML Struktor
Hallo,
für einen Editor möchte ich zunächst die Original Daten kopieren um diese dann einem Editor zu übergeben. Dadurch kann ich beim Editor den Abbruch Button verwenden um wieder die originalen Daten zu haben. Für die XML Datenstruktur habe ich den Wizard des BDS2010 verwendet. Lade ich nun eine Datei, so zeigt mir das Memo auch an, dass genau zwei Elemente da sind. Dann kopiere ich diese Daten mit Hilfe eines memoryStreams in eine neue Datenstruktur. und dort sind dann keine Elemente mehr vorhanden. Liegt hier ein Bug meinerseits vor? zu Testzwecken lade ich Datei nochmal (2. copy) über "NewCutprograms" und "LoadFromFile". Auch hier wird fehlerhaft die Anzahl mit 0 angegeben.
Code:
mfg
procedure TForm20.Button1Click(Sender: TObject);
var XMLCutprogramList : IXMLCutprogramsType; XMLCutprogramCopy : IXMLCutprogramsType; MemoryStream : TMemoryStream; begin Memo1.Lines.Clear; // orig: XMLCutprogramList := LoadCutprograms(ed1.Text); Memo1.Lines.Add(Format ('orig. Count: %d', [XMLCutprogramList.Count])); MemoryStream := TMemoryStream.Create; XMLCutprogramList.OwnerDocument.SaveToStream(MemoryStream); // copy: MemoryStream.Position := 0; XMLCutprogramCopy := NewCutprograms; XMLCutprogramCopy.OwnerDocument.LoadFromStream(MemoryStream); Memo1.Lines.Add(Format ('copy. Count: %d', [XMLCutprogramCopy.Count])); MemoryStream.Free; // 2. copy: XMLCutprogramCopy := NewCutprograms; XMLCutprogramCopy.OwnerDocument.LoadFromFile(ed1.Text); Memo1.Lines.Add(Format ('2 copy. Count: %d', [XMLCutprogramCopy.Count])); end; |
AW: XML: Kopieren einer kompletten XML Struktor
Geht das hier? Also erstes XML => String => neuesXML aus string
Delphi-Quellcode:
XMLCutprogramCopy := LoadXMLData(XMLCutorgramList.XML);
|
AW: XML: Kopieren einer kompletten XML Struktor
Danke Für den Hinweis.
Geht leider auch nicht:
Code:
procedure TForm20.Button3Click(Sender: TObject); var XMLCutprogramList : IXMLCutprogramsType; XMLCutprogramCopy : IXMLCutprogramsType; begin Memo1.Lines.Clear; // orig: XMLCutprogramList := LoadCutprograms(ed1.Text); Memo1.Lines.Add(Format ('orig. Count: %d', [XMLCutprogramList.Count])); XMLCutprogramCopy := NewCutprograms; XMLCutprogramCopy.OwnerDocument.LoadFromXML (XMLCutprogramList.XML); XMLCutprogramCopy.Resync; Memo1.Lines.Add(Format ('3 copy. Count: %d', [XMLCutprogramCopy.Count])); //Memo1.Lines.Add (XMLCutprogramList.XML); end; |
AW: XML: Kopieren einer kompletten XML Struktor
Hupsa, was vergessen, das hier sollte hinhauen:
Delphi-Quellcode:
Über Ownerdocument kommst Du jedenfalls nicht weiter. Schau dir doch einfach den vom Wizzard generierten Code an, speziell den GetXMLCutprogramsType.
XMLCutprogramCopy := LoadXMLData(XMLCutorgramList.XML).DocumentElement as IXMLCutprogramsType;
|
AW: XML: Kopieren einer kompletten XML Struktor
Hallo,
vielen Dank für diese Idee. Leider kommt baim Ausführen eine Exception: --------------------------- Benachrichtigung über Debugger-Exception --------------------------- Im Projekt FrontendTest.exe ist eine Exception der Klasse EIntfCastError mit der Meldung 'Interface not supported' aufgetreten.
Code:
procedure TForm20.Button4Click(Sender: TObject);
var XMLCutprogramList : IXMLCutprogramsType; XMLCutprogramCopy : IXMLCutprogramsType; XMLDocument : IXMLDocument; begin Memo1.Lines.Clear; // orig: XMLCutprogramList := LoadCutprograms(ed1.Text); Memo1.Lines.Add(Format ('orig. Count: %d', [XMLCutprogramList.Count])); XMLCutprogramCopy := LoadXMLData(XMLCutprogramList.XML).DocumentElement as IXMLCutprogramsType; // <<--- hier Memo1.Lines.Add(Format ('1 copy. Count: %d', [XMLCutprogramCopy.Count])); //Memo1.Lines.Add (XMLCutprogramList.XML); end; mfg DerDan |
AW: XML: Kopieren einer kompletten XML Struktor
Hallo,
dein Hinweis mit dem Anschauen und deine anderen Hinweise habem mich auf diese Lösung gebracht:
Code:
und die Funktioniert. Vielen Dank
procedure TForm20.Button4Click(Sender: TObject);
var XMLCutprogramList : IXMLCutprogramsType; XMLCutprogramCopy : IXMLCutprogramsType; XMLDocument : IXMLDocument; begin Memo1.Lines.Clear; // orig: XMLCutprogramList := LoadCutprograms(ed1.Text); Memo1.Lines.Add(Format ('orig. Count: %d', [XMLCutprogramList.Count])); XMLDocument := LoadXMLData(XMLCutprogramList.XML); XMLCutprogramCopy := GetCutprograms(XMLDocument); Memo1.Lines.Add(Format ('1 copy. Count: %d', [XMLCutprogramCopy.Count])); end; mfg DerDan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 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