Forum > General
How to merge a nodes from two different xml files using DOM library
(1/1)
Wujek:
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:
--- Code: Pascal [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---{$mode objfpc}{$H+} uses Classes, SysUtils, DOM, XMLRead, XMLWrite; const XMLHeader = '<?xml version="1.0"?>'; var ss1,ss2: TStringStream; xml1,xml2: TXMLDocument; node,impNode: TDOMNode;begin try ss1 := TStringStream.Create(XMLHeader + '<root><node attr="value">text</node></root>'); ss2 := TStringStream.Create(XMLHeader + '<root></root>'); 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.
Navigation
[0] Message Index