![]() |
XML Knoten vertauschen
Hallo,
wie kann man zwei XML-Knoten mit der MSXML2_TLB vertauschen? Also so aus:
Code:
folgendes machen:
<doc>
<eintrag> <id> 1 </id> </eintrag> <eintrag> <id> 2 </id> </eintrag> </doc>
Code:
?
<doc>
<eintrag> <id> 2 </id> </eintrag> <eintrag> <id> 1 </id> </eintrag> </doc> Ich habe schon probiert die Pointer in der XMLZugriffsklasse zu ändern, leider ohne Erfolg. Könnt ihr mir helfen? Gruß |
Re: XML Knoten vertauschen
Angenommen, du hast die beiden Elemente "in der Mache":
Delphi-Quellcode:
Dann so vertauschen:
e1, e2, parent : IXMLDOMEelement;
e1 := ... ; // <eintrag><id> 1 </id></eintrag> e2 := ... ; // <eintrag><id> 2 </id></eintrag>
Delphi-Quellcode:
// ungetestet (das ist dein Job ;-)
parent := e1.ParentNode; parent.insertBefore(e2, e1); // e2 wird vor e1 eingefügt parent.removeChild(e2); |
Re: XML Knoten vertauschen
Deine Idee war schon nicht schlecht. So geht es auf jeden Fall (Man muss nur wissen welcher oben steht):
Delphi-Quellcode:
procedure TScheduler.VertauscheTagesPlan(p1, p2,pDisp: String);
var node,node1,node2,new: IXMLDOMNode; begin node1 := XMLScheduler.selectSingleNode('Planer/Tage/Eintrag[ID="' + p1 + '"]'); node2 := XMLScheduler.selectSingleNode('Planer/Tage/Eintrag[ID="' + p2 + '"]'); if (node1 <> nil) and (node2 <> nil) then begin node := node1.parentNode; new := node2.cloneNode(true); node.insertBefore(new,node1); node.removeChild(node2); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:21 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