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>