ach das mit I2 wollte ich auch gerade schreiben.
Aber, den elsezweig ausklammern ist nicht richtig, genau der macht das richtige. Du hast schon recht, es fehlt nur noch das löschen der vorhandenen alten childnodes.
Das Ergebnis Deiner korrigierten Routine ist jetzt
Delphi-Quellcode:
<root>
<nodes>
<node>
<Kenn>Kennung1</Kenn> << raus, dann stimmts
<Wert>Wert1</Wert> << raus, dann stimmts
<Kenn>Kennung1</Kenn>
<Wert>Wert1</Wert>
</node>
<node>
<Kenn>Kennung2</Kenn> << raus, dann stimmts
<Wert>Wert2</Wert> << raus, dann stimmts
<Kenn>Kennung2</Kenn>
<Wert>Wert22222222</Wert>
</node>
<node>
<Kenn>Kennung3</Kenn>
<Wert>Wert3</Wert>
</node>
<node>
<Kenn>Kennung4</Kenn>
<Wert>Wert4</Wert>
</node>
<node>
<Kenn>Kennung5</Kenn>
<Wert>Wert5</Wert>
</node>
</nodes>
</root>
Fehlt also nur noch das Löschen, dann sollte es stimmen.
mit Pfusch
Delphi-Quellcode:
while Assigned(NodeAnother) do
begin
NodeNext := NodeAnother.NextSibling;
i := 0;
while (i < NodeBase.childNodes.length)
and (NodeBase.childNodes[i].firstChild.text
<> NodeAnother.firstChild.text) do
Inc(i);
if i >= NodeBase.childNodes.length then
begin
NodeBase.appendChild(NodeAnother);
end else begin
// NodeBase.childNodes[i].childNodes.DeleteAllChilds; <<<<<<<
NodeBase.childNodes[i].removeChild(NodeBase.childNodes[i].firstChild);
NodeBase.childNodes[i].removeChild(NodeBase.childNodes[i].firstChild);
for i2 := 0 to NodeAnother.childNodes.length - 1 do
NodeBase.childNodes[i].appendChild(NodeAnother.childNodes[0]);
end;
NodeAnother := NodeNext;
end;
edit: hier stimmt doch was nicht, da i2 gar nicht in der Schleife vorkommt...
Kommt das richtige Ergebnis:
Delphi-Quellcode:
<root>
<nodes>
<node>
<Kenn>Kennung1</Kenn>
<Wert>Wert1</Wert>
</node>
<node>
<Kenn>Kennung2</Kenn>
<Wert>Wert22222222</Wert>
</node>
<node>
<Kenn>Kennung3</Kenn>
<Wert>Wert3</Wert>
</node>
<node>
<Kenn>Kennung4</Kenn>
<Wert>Wert4</Wert>
</node>
<node>
<Kenn>Kennung5</Kenn>
<Wert>Wert5</Wert>
</node>
</nodes>
</root>