Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the fastest way to combine two xml files into one

Tags:

c#

xml

If I have two string of xml1 and xml2 which both represent xml in the same format. What is the fastest way to combine these together? The format is not important, but I just want to know how can I get rid off or ?

xml1 :

<?xml version="1.0" encoding="utf-8"?> <AllNodes>    <NodeA>       <NodeB>test1</NodeB>       <NodeB>test2</NodeB>    </NodeA> </AllNodes> 

xm2 :

<?xml version="1.0" encoding="utf-8"?> <AllNodes>    <NodeA>       <NodeB>test6</NodeB>       <NodeB>test7</NodeB>    </NodeA>    <NodeA>       <NodeB>test99</NodeB>       <NodeB>test23</NodeB>    </NodeA> </AllNodes> 

and have something like this :

<?xml version="1.0" encoding="utf-8"?>     <AllNodes>           <NodeA>               <NodeB>test1</NodeB>               <NodeB>test2</NodeB>           </NodeA>          <NodeA>               <NodeB>test6</NodeB>               <NodeB>test7</NodeB>            </NodeA>            <NodeA>               <NodeB>test99</NodeB>               <NodeB>test23</NodeB>            </NodeA>     </AllNodes> 
like image 345
paradisonoir Avatar asked Jun 11 '09 17:06

paradisonoir


People also ask

How can I merge two XML files online?

Choose the Merger equal to the format you want documents to be saved to. To add files click anywhere in the blue area or on the Browse for file button to upload or drag and drop them. You can also add the documents by entering their URL in the URL cell. Click on the Merge button.

What is XML merge?

The XML Merge component is a transformation component used to take incoming data from upstream SSIS source components and merge them into one SSIS column data based on the XML data structure defined in the component. This data can be then consumed by a downstream pipeline component.

How do I merge XML files in Python?

Code Explanation First, we have imported a required module, And to merge two XML files in python, we have imported ElementTree Module. The ElementTree. getroot() method returns a root element of each document. Finally, to add the element of one tree to the other, we will make use of the element.


2 Answers

The easiest way to do this is using LINQ to XML. You can use either Union or Concat depending on your needs.

var xml1 = XDocument.Load("file1.xml"); var xml2 = XDocument.Load("file2.xml");  //Combine and remove duplicates var combinedUnique = xml1.Descendants("AllNodes")                           .Union(xml2.Descendants("AllNodes"));  //Combine and keep duplicates var combinedWithDups = xml1.Descendants("AllNodes")                            .Concat(xml2.Descendants("AllNodes")); 
like image 61
Jose Basilio Avatar answered Oct 10 '22 01:10

Jose Basilio


An XSLT transformation could do it:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">   <xsl:param name="pXml1" select="''" />   <xsl:param name="pXml2" select="''" />   <xsl:param name="pRoot" select="'root'" />    <xsl:template match="/">     <xsl:variable name="vXml1" select="document($pXml1)" />     <xsl:variable name="vXml2" select="document($pXml2)" />      <xsl:element name="{$pRoot}">       <xsl:copy-of select="$vXml1/*/*" />       <xsl:copy-of select="$vXml2/*/*" />     </xsl:element>   </xsl:template>  </xsl:stylesheet> 

Pass in the names of the files as parameters, as well as the name of the new root element.

Apply to any XML document, e.g. an empty one.

like image 41
Tomalak Avatar answered Oct 10 '22 03:10

Tomalak