Autor Beitrag
Senex
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 17

WinXP
Delphi 7 Pers, Delphi2005 Pers, Turbo Delphi, Turbo C++
BeitragVerfasst: Mo 25.06.07 11:38 
Ich benutze IXMLDocument um auf eine XML-Datei zuzugreifen. Nun möchte ich jeden Knoten löschen, der einen bestimmten Text enthält.

bisher sieht das bei mir so aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var
  IDs: IXMLNode;
  i: Integer;
begin
  IDs := Data.DocumentElement.ChildNodes['IDs'];
  for i := 0 to IDs.ChildNodes.Count do
    if IDs.ChildNodes[i].Text = 'der Text' then
      IDs.DOMNode.removeChild(IDs.ChildNodes[i].DOMNode);
end;


Das scheint mir irgendwie nicht sonderlich schön. Gibt es keine Methode um direkt von einer IXMLNode aus etwas zu löschen? In diesem Beitrag steht etwas von DocumentElement.removeChild ... diese Methode gibt's bei mir aber leider nicht... mache ich irgendwas falsch, oder ist meine bisherige Lösung die einzige?

_________________
Alles ist relativ. Außer der Lichtgeschwindigkeit. Die ist relativ konstant.
Stefan.Buchholtz
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 612

WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
BeitragVerfasst: Mo 25.06.07 12:14 
Mit

ausblenden Delphi-Quelltext
1:
2:
3:
for i := IDs.ChildNodes.Count - 1 downto 0 do
  if IDs.ChildNodes[i].Text = 'der Text' then  
   IDs.ChildNodes.Delete(i);


sollte es gehen. Die Schleife muss rückwärts laufen, damit du am Ende keine Indexüberschreitung bekommst, wenn du Knoten gelöscht hast - bei einer for-Schleife wird der Ausdruck für den Endwert nur einmal ausgewertet, nicht bei jedem Durchlauf.

Stefan

_________________
Ein Computer ohne Windows ist wie eine Schokoladentorte ohne Senf.