Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

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

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

  Alt 23. Sep 2009, 15:53
Wie um Himmels Willen, wie löscht man bei diesem Ding die alten Nodes?

Aber im Prinzip geht's, auch wenn man via XPath oder so, bestimmt kürzeren Code hinbekommt
Delphi-Quellcode:
function XMLmergeBasefileWithAnotherFile(const aBaseXMLfile, aAnotherXMLfile, aTargetFile: String): Boolean;
var
  XmldocBase, XmldocAnother : DOMDocument;
  NodeBase, NodeAnother, NodeNext : IXMLDOMNode;
  i, i2 : Integer;
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.firstChild;
  NodeAnother := XmldocAnother.documentElement.firstChild.firstChild;

  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; <<<<<<<
    // for i2 := 0 to NodeAnother.childNodes.length - 1 do
    // NodeBase.childNodes[i].appendChild(NodeAnother.childNodes[0]);
    end;
    NodeAnother := NodeNext;
  end;

  XmldocBase.save(aTargetFile);
  Result := True;
end;
macht aus dem in Beitrag #3 dieses
XML-Code:
<?xml version="1.0"?>
<root>
  <nodes>
    <node>
      <Kenn>Kennung1</Kenn> << müßte noch gelöscht werden
      <Wert>Wert1</Wert> << müßte noch gelöscht werden
      <Kenn>Kennung1</Kenn>
      <Kenn>Kennung2</Kenn>
    </node>
    <node>
      <Kenn>Kennung2</Kenn> << müßte noch gelöscht werden
      <Wert>Wert2</Wert> << müßte noch gelöscht werden
      <Wert>Wert1</Wert>
      <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>
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat