How to merge a nodes from two different xml files using DOM library
lazarus / 62-General
----------------------------------------------------------------------
Wujek · 2018-02-23 20:58
I have been looking for a way to merge two different xml files in one
file, or move a node from one to another. It is possible using DOM ?
If yes, please give me an example.
Regards
Zbig
----------------------------------------------------------------------
Leledumbo · 2018-02-25 07:01
Code: Pascal [Select][+][-]window.onload = function(){var x1 =
document.getElementById("main_content_section"); if (x1) { var x =
document.getElementsByClassName("geshi");for (var i = 0; i {$mode
objfpc}{$H+} uses Classes, SysUtils, DOM, XMLRead, XMLWrite; const
XMLHeader = ''; var ss1,ss2: TStringStream;
xml1,xml2: TXMLDocument; node,impNode: TDOMNode;begin try ss1 :=
TStringStream.Create(XMLHeader + 'text'); ss2 :=
TStringStream.Create(XMLHeader + '');
WriteLn('BEFORE:'); WriteLn('XML 1: ' + ss1.DataString);
WriteLn('XML 2: ' + ss2.DataString); ReadXMLFile(xml1,ss1);
ReadXMLFile(xml2,ss2); node := xml1.DocumentElement.FirstChild;
// xm1.root.node impNode := xml2.ImportNode(node,true); //
import a.k.a clone + assign new owner document
xml2.DocumentElement.AppendChild(impNode); // make it a new child of
xml2.root xml1.DocumentElement.RemoveChild(node); // remove from
xml1.root // stream position will be at the string end after
ReadXMLFile above, so we need to // reset it to the initial
position, otherwise it will be appended instead of overwritten
ss1.Seek(0, soBeginning); ss2.Seek(0, soBeginning);
WriteXMLFile(xml1,ss1); WriteXMLFile(xml2,ss2); WriteLn();
WriteLn('AFTER:'); WriteLn('XML 1: ' + ss1.DataString);
WriteLn('XML 2: ' + ss2.DataString); finally xml1.Free;
xml2.Free; ss1.Free; ss2.Free; end;end. Merging is just a
variation of this, I'll leave that as an exercise for you.