Delphi-Quellcode:
function XMLmergeBasefileWithAnotherFile(const aBaseXMLfile, aAnotherXMLfile, aTargetFile: String): Boolean;
var
XmldocBase, XmldocAnother : DOMDocument;
NodeBase, NodeAnother, NodeNext : IXMLDOMNode;
begin
Result := False;
XmlDocBase := CoDOMDocument.Create;
if not xmlDocBase.load(aBaseXMLfile) then exit;
XmldocAnother := CoDOMDocument.Create;
if not XmldocAnother.load(aAnotherXMLfile) then exit;
NodeBase := XmlDocBase.documentElement;
NodeAnother := XmldocAnother.documentElement.firstChild;
while Assigned(NodeAnother) do
begin
NodeNext := NodeAnother.NextSibling;
NodeBase.appendChild(NodeAnother);
NodeAnother := NodeNext;
end;
XmldocBase.save(aTargetFile);
Result := True;
end;
while NodeAnother.NextSibling <> nil do
NodeAnother und nicht NodeAnother.NextSibling, da sonst immer der letze Knoten vergessen würde,
man will ja diesen Knoten einfügen und da ist es nur wichtig, daß dieser existiert ... der nachvolgende ist erstmal egal und wird dann im nächsten Durchgang geprüft
ListBase und ListAnother wurden nie verwendet
Delphi-Quellcode:
NodeBase.appendChild(NodeAnother);
NodeAnother := NodeAnother.NextSibling;
wenn NodeAnother auf das andere Dokument übertragen wurde, hat er keinen Nachfolger mehr, da er er als letzes eingefügt wurde und der "alte" Nachfolger im anderen Dokument verblieb ... also erst den Nachfolger merken und dann den Knoten übertragen
Delphi-Quellcode:
RootAnother := XmlDocBase.documentElement; <<<<<<<<<<<
ListAnother := RootAnother.childNodes;
...
while NodeAnother.NextSibling <> nil do
und daß deine Schleife nie loslief bzw. eine
Exception warf, lag auch daran
> Root
Another und XmlDoc
Base ... fällt dir da was auf?
[edit] die Prozedur noch schnell in eine Funktion umgewandelt