Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi XML Knoten vertauschen (https://www.delphipraxis.net/101110-xml-knoten-vertauschen.html)

axelf98 8. Okt 2007 15:42


XML Knoten vertauschen
 
Hallo,
wie kann man zwei XML-Knoten mit der MSXML2_TLB vertauschen? Also so aus:

Code:
<doc>
  <eintrag>
    <id> 1 </id>
  </eintrag>
  <eintrag>
    <id> 2 </id>
  </eintrag>
</doc>
folgendes machen:

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ß

shmia 8. Okt 2007 16:38

Re: XML Knoten vertauschen
 
Angenommen, du hast die beiden Elemente "in der Mache":
Delphi-Quellcode:
e1, e2, parent : IXMLDOMEelement;
e1 := ... ; // <eintrag><id> 1 </id></eintrag>
e2 := ... ; // <eintrag><id> 2 </id></eintrag>
Dann so vertauschen:
Delphi-Quellcode:
// ungetestet (das ist dein Job ;-)
parent := e1.ParentNode;
parent.insertBefore(e2, e1);  // e2 wird vor e1 eingefügt
parent.removeChild(e2);

axelf98 9. Okt 2007 14:09

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 17:48 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