Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

Re: (unbekannte) XML Dateien zusammenführen bzw. mergen

  Alt 22. Sep 2009, 10:38
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
> RootAnother und XmlDocBase ... fällt dir da was auf?

[edit] die Prozedur noch schnell in eine Funktion umgewandelt
$2B or not $2B
  Mit Zitat antworten Zitat