Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Help with combining XML Files using VB.NET

Posted on 2016-08-09
9
Medium Priority
?
59 Views
1 Endorsement
Last Modified: 2016-08-11
Hi,

How do create an xml file with fields from 4 other xml files using VB.NET?

For example using two xml files, if the following two xml files contains multiple records with the following data elements:

File1.xml

<Root>
<Fields>
<ID>1</ID
<NSC>A</NSC>
<FIF>B</FIF>
<AGD>C</AGD>
<UVN>D</UVN>
</Fields
<Fields>
<ID>2</ID
<NSC>A1</NSC>
<FIF>B1</FIF>
<AGD>C1</AGD>
<UVN>D1</UVN>
</Fields
</Root>

File2.xml
<Root>
<Fields>
<ID>1</ID
<PFP>A</PFP>
<STL>B</STL>
<BGD>C</BGD>
<UVN>D</UVN>
</Fields
</Root>

How do I create one xml from the two files with no duplicate data elements?

<Root>
<Fields>
<ID>1</ID
<NSC></NSC>
<FIF></FIF>
<AGD></AGD>
<UVN></UVN>
<PFP></PFP>
<STL></STL>
<BGD></BGD>
</Fields
</Root>
Thanks,

victor
1
Comment
Question by:vcharles
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
  • 2
  • +1
9 Comments
 
LVL 10

Expert Comment

by:Paweł
ID: 41749822
What i would do is de-serialize the xmls into objects use linq to combine the objects into one array or list then serialize that collection to file.
0
 
LVL 12

Expert Comment

by:funwithdotnet
ID: 41749829
There's many ways to do that. Many experts use XDocument or XElement to process XML files.

For me, it depends on the schema, content and use. I like to read XML into DataSets. I'm comfortable with processing data using System.Data tools. Whenever the XML schema fits a database structure, I use DataTable.ReadXml.

For writing the XML, I usually do it manually, because the schema isn't usually very database-like. Basically, I just iterate through DataRows, formatting & appending string data. DataTables can write XML, but I think it's easier to get the correct finished product manually.

Good luck!
0
 
LVL 12

Expert Comment

by:funwithdotnet
ID: 41749831
For uniqueness in elements returned, there are a number of ways to do that. I would just go through all the field in all the data and compile a list of unique columns. Then as the data is read, I can determine if a value should be captured for a given output element.
0
CHALLENGE LAB: Troubleshooting Connectivity Issues

Goal: Fix the connectivity issue in the lab's AWS environment so that you can SSH into the provided EC2 instance.  

 
LVL 64

Accepted Solution

by:
Fernando Soto earned 2000 total points
ID: 41750514
Hi Victor;

The following code snippet will do what you need.
'' Make a list of all the names to be compared in the query
Dim FileNames As New List(Of String) From {"..\..\file1.xml", "..\..\file2.xml"}
'' All the node names
Dim fields As List(Of String) = New List(Of String)
'' Go through all the files in the list to get the nodes names
For Each file As String In FileNames
    Dim xdoc = XDocument.Load(file)
    Dim nodeName As List(Of String) = (From f In xdoc.Descendants("Fields").Elements()
                                       Select f.Name.LocalName).ToList()
    fields.AddRange(nodeName)
Next
'' Fields now contains a list of all the Distinct field names
fields = fields.Distinct().ToList()
'' Create the new XML document with Distinct nodes
Dim newDoc = <Root>
                 <Fields>
                     <%= From n In fields
                         Select <<%= n %>/>
                     %>
                 </Fields>
             </Root>
'' Save the XML document to the file system
newDoc.Save("Main.xml")

Open in new window

0
 

Author Comment

by:vcharles
ID: 41750746
Hello,

Thank you for all the comments. I will try the code and get back to you.

Victor
0
 

Author Comment

by:vcharles
ID: 41751027
Hi Fernando,

The code works. Thank You.

is there a way to avoid including table names of the xml files in code below? Each xml file contains different tables.

Dim nodeName As List(Of String) = (From f In xdoc.Descendants(???).Elements()
                                       Select f.Name.LocalName).ToList()
Thanks,

Victor
0
 
LVL 64

Expert Comment

by:Fernando Soto
ID: 41751263
Hi Victor;

Change the query to this.
Dim nodeName As List(Of String) = (From f In xdoc.Root.Elements().Elements()
                                   Select f.Name.LocalName).ToList()

Open in new window

0
 

Author Comment

by:vcharles
ID: 41751328
Thank you.
0
 
LVL 64

Expert Comment

by:Fernando Soto
ID: 41751889
Hi Victor;

If the solution worked out for you please close the question.

Thanks
0

Featured Post

New feature and membership benefit!

New feature! Upgrade and increase expert visibility of your issues with Priority Questions.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Welcome my friends to the second instalment and follow-up to our Minify and Concatenate Your Scripts and Stylesheets (http://www.experts-exchange.com/Programming/Languages/.NET/ASP.NET/A_4334-Minify-and-Concatenate-Your-Scripts-and-Stylesheets.html)…
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
In this brief tutorial Pawel from AdRem Software explains how you can quickly find out which services are running on your network, or what are the IP addresses of servers responsible for each service. Software used is freeware NetCrunch Tools (https…
Want to learn how to record your desktop screen without having to use an outside camera. Click on this video and learn how to use the cool google extension called "Screencastify"! Step 1: Open a new google tab Step 2: Go to the left hand upper corn…

705 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question