AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML XML: Kopieren einer kompletten XML Struktor
Thema durchsuchen
Ansicht
Themen-Optionen

XML: Kopieren einer kompletten XML Struktor

Ein Thema von DerDan · begonnen am 9. Aug 2012 · letzter Beitrag vom 10. Aug 2012
Antwort Antwort
DerDan

Registriert seit: 15. Nov 2004
Ort: Donaueschingen
251 Beiträge
 
Delphi XE3 Professional
 
#1

XML: Kopieren einer kompletten XML Struktor

  Alt 9. Aug 2012, 10:58
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:
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;
mfg
nichts ist so schön wie man es sich vorstellt
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#2

AW: XML: Kopieren einer kompletten XML Struktor

  Alt 9. Aug 2012, 11:07
Geht das hier? Also erstes XML => String => neuesXML aus string

  XMLCutprogramCopy := LoadXMLData(XMLCutorgramList.XML);
  Mit Zitat antworten Zitat
DerDan

Registriert seit: 15. Nov 2004
Ort: Donaueschingen
251 Beiträge
 
Delphi XE3 Professional
 
#3

AW: XML: Kopieren einer kompletten XML Struktor

  Alt 9. Aug 2012, 11:31
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;
nichts ist so schön wie man es sich vorstellt
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#4

AW: XML: Kopieren einer kompletten XML Struktor

  Alt 9. Aug 2012, 11:35
Hupsa, was vergessen, das hier sollte hinhauen:
  XMLCutprogramCopy := LoadXMLData(XMLCutorgramList.XML).DocumentElement as IXMLCutprogramsType; Über Ownerdocument kommst Du jedenfalls nicht weiter. Schau dir doch einfach den vom Wizzard generierten Code an, speziell den GetXMLCutprogramsType.
  Mit Zitat antworten Zitat
DerDan

Registriert seit: 15. Nov 2004
Ort: Donaueschingen
251 Beiträge
 
Delphi XE3 Professional
 
#5

AW: XML: Kopieren einer kompletten XML Struktor

  Alt 10. Aug 2012, 09:25
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
nichts ist so schön wie man es sich vorstellt
  Mit Zitat antworten Zitat
DerDan

Registriert seit: 15. Nov 2004
Ort: Donaueschingen
251 Beiträge
 
Delphi XE3 Professional
 
#6

AW: XML: Kopieren einer kompletten XML Struktor

  Alt 10. Aug 2012, 09:30
Hallo,

dein Hinweis mit dem Anschauen und deine anderen Hinweise habem mich auf diese Lösung gebracht:

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]));

  XMLDocument := LoadXMLData(XMLCutprogramList.XML);
  XMLCutprogramCopy := GetCutprograms(XMLDocument);
  Memo1.Lines.Add(Format ('1 copy. Count: %d', [XMLCutprogramCopy.Count]));
end;
und die Funktioniert. Vielen Dank

mfg

DerDan
nichts ist so schön wie man es sich vorstellt
  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 17:51 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