![]() |
XML-Node kopieren
Moin,
vielleicht bin ich ja auch zu blöde, aber ... mit dem folgenden Source will ich den einen kompletten Node in einen anderen in der gleichen XML-Datei kopieren - aber irgendwie geht das nicht. Sieht da jemand anderes den Fehler ? ich hatte die Frage auch schon in Delphi-treff gestellt ... aber als Lösung kam da dann das ich das nur mit durchlaufen und kopieren der einzelnen SubNodes machen könnte ... aber leider schaffe ich selbst das nicht und weiß nicht weiter :( Gruß Hans
Delphi-Quellcode:
procedure TForm1.Button5Click(Sender: TObject);
var movies: IXMLDOMNodeList; // wird alle Filme (die Pakete) enthalten newNode: IXMLDOMNode; oldNode: IXMLDOMNode; // enthält eine Node OldID: String; begin (* Kopiert den Node 5 auf den Node 3 *) movies := xmlDoc.documentElement.selectNodes('movie'); oldNode := xmlDoc.documentElement.selectSingleNode('/movieorganizer/movie[id="3"]'); OldID := Oldnode.selectSingleNode('id').text; newNode := xmlDoc.documentElement.selectSingleNode('/movieorganizer/movie[id="5"]'); oldNode := newNode; OldNode := movies.item[2].selectSingleNode('id'); OldNode.Text := '3'; UpdateList; end; |
AW: XML-Node kopieren
Delphi-Quellcode:
kopiert nur Instanzzeiger, aber keine Objekt-/Interface-Inhalte. :zwinker:
oldNode := newNode;
Es gibt doch bestimmt in dem Node eine Methode welche sich irgendwie "Clone" nennt?
Delphi-Quellcode:
Weglassen und nicht den Node, sondern nur dessen Subnodes klonen/rüberkopieren.
OldNode := movies.item[2].selectSingleNode('id');
OldNode.Text := '3';
Delphi-Quellcode:
OldID := Oldnode.selectSingleNode('id').text;
ist irgendwie sinnlos, wobei dir der Compiler eigentlich sagen auch sollte, daß du den an OldID zugewiesenen Wert nirgends verwendest. |
AW: XML-Node kopieren
Hi Himitsu,
Zitat:
Zitat:
Delphi-Quellcode:
Aber ... da passiert eben nichts :(
procedure TForm1.Button5Click(Sender: TObject); // kompletten Node in einen anderen kopieren
var movies: IXMLDOMNodeList; // wird alle Filme (die Pakete) enthalten newNode: IXMLDOMNode; oldNode: IXMLDOMNode; // enthält eine Node begin (* Kopiert den Node 5 auf den Node 3 *) movies := xmlDoc.documentElement.selectNodes('movie'); oldNode := xmlDoc.documentElement.selectSingleNode('/movieorganizer/movie[id="3"]'); newNode := OldNode.cloneNode(True); UpdateList; end; Zitat:
Gruß Hans |
AW: XML-Node kopieren
Delphi-Quellcode:
Aber du willst ja wohl irgendwas in dieser Richtung haben:
// klont den Knoten "movie[id=3]" und speichert ihn in NewNode
//movies := xmlDoc.documentElement.selectNodes('movie'); // nicht verwendet oldNode := xmlDoc.documentElement.selectSingleNode('/movieorganizer/movie[id="3"]'); newNode := OldNode.cloneNode(True); // mit NewNode wird nichts gemacht und es wird am Ende der Prozedur wieder weggeworfen // ließ einfach mal, was in der OH zu cloneNode (Xmldom.IDOMNode.cloneNode) steht.
Delphi-Quellcode:
// kopiert Inhalt von 3 nach 5
oldNode := xmlDoc.documentElement.selectSingleNode('/movieorganizer/movie[id="3"]'); newNode := xmlDoc.documentElement.selectSingleNode('/movieorganizer/movie[id="5"]'); for i := 0 to newNode.childNodes.length - 1 do newNode.appendChild(oldNode.childNodes.item[i].cloneNode(True)); // oder // kopiert die 3, benennt die Kopie in 5 um oldNode := xmlDoc.documentElement.selectSingleNode('/movieorganizer/movie[id="3"]'); newNode := xmlDoc.documentElement.selectSingleNode('/movieorganizer'); clone := oldNode.cloneNode(True); clone.attributes.getNamedItem('id').text := '5'; newNode.appendChild(clone); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 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