?
Solved

Help with creating multiple xml files from one xml file using VB.NET

Posted on 2013-10-27
9
Medium Priority
?
538 Views
Last Modified: 2013-10-28
Hi,

If I have an xml file in the following format:


<Root>
<Table1>
<Link_ID></lINK_ID>
<Item></Item>
</Table1>
<Table2>
<Link_ID></lINK_ID>
<Item></Item>
</Table2>
<Table3>
<Link_ID></lINK_ID>
<Item></Item>
</Table3>
</Root>

How do I create another xml for each table?

File1.xml:
<Root>
<Table1>
<Link_ID></lINK_ID>
<Item></Item>
</Table1>
</Root>

File2.xml:
<Root>
<Table2>
<Link_ID></lINK_ID>
<Item></Item>
</Table2>
</Root>

File3.xml:
<Root>
<Table3>
<Link_ID></lINK_ID>
<Item></Item>
</Table3>
</Root>

Thanks,

Victor
0
Comment
Question by:vcharles
  • 5
  • 2
  • 2
9 Comments
 
LVL 64

Accepted Solution

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

This code snippet should give the results you are looking for.

' Load original XML document
Dim xdoc = XElement.Load("C:\Working Directory\AllTables.xml")
' Get all the tableX nodes and there children
Dim tables = From t in xdoc.Descendants() _
             Where t.Name.ToString().StartsWith("Table")
             Select t

' Set up the new XML document and save to the file system             
For Each table In tables
    ' Get the Table number so that we can create the file name with that number
    Dim fileNumber As String = table.Name.ToString().SubString(5)
    ' Create a new Root node and add the TableX as its child
    Dim newRoot = New XElement("Root", table)
    ' Save the new XML document to the file system
    newRoot.Save("C:\Working Directory\File" + fileNumber + ".xml") 
Next

Open in new window

0
 
LVL 15

Expert Comment

by:Ess Kay
ID: 39604743
You can use regular expressions

Run a loop with the number of tables

With pattern "<table" & Counter & ">*</table" & Counter & ">"
0
 
LVL 15

Expert Comment

by:Ess Kay
ID: 39604747
Sorry,  scrap the loop,  just the pattern
"<table*</table.>"

Each match from regex will be the entire table.  Save it to xml file like

For each match in regex(xmlfile,  pattern)
Save xml
0
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 

Author Comment

by:vcharles
ID: 39604792
Thank you for all the comments, will test the code and get back to you.
0
 

Author Comment

by:vcharles
ID: 39604848
Hi,

I received error on line. Row is the name of the first table

Dim fileNumber As String = table.Name.ToString().Substring(5)

Error:

startIndex cannot be larger than length of string.
Parameter name: startIndex

 Dim xdoc = XElement.Load(Application.StartupPath & "\LinkFinal.xml")
        ' Get all the tableX nodes and there children
        Dim tables = From t In xdoc.Descendants() _
                     Where t.Name.ToString().StartsWith("Row")
                     Select t

        ' Set up the new XML document and save to the file system            
        For Each table In tables
            ' Get the Table number so that we can create the file name with that number
            Dim fileNumber As String = table.Name.ToString().Substring(5)
            ' Create a new Root node and add the TableX as its child
            Dim newRoot = New XElement("Root", table)
            ' Save the new XML document to the file system
            'newRoot.Save("C:\Working Directory\File" + fileNumber + ".xml")
            newRoot.Save(Application.StartupPath & fileNumber & ".xml")
0
 

Author Closing Comment

by:vcharles
ID: 39605222
It works.

Thank You.

Victor
0
 

Author Comment

by:vcharles
ID: 39605401
Hi,

Is it possible to use the same code and loop through multiple tables in a string rather than writing the same code for multiple tables?

For example, If I include the tables in a string variable s = Name,Item,Location,Tasks

How do I use s in the code to save an xml file for each table?

Victor
0
 
LVL 64

Expert Comment

by:Fernando Soto
ID: 39605598
Hi Victor;

To your question, "Is it possible to use the same code and loop through multiple tables in a string rather than writing the same code for multiple tables?", you can't use the exact same code, the code will need to change to handle the different format of the source data.

To your question, "For example, If I include the tables in a string variable s = Name,Item,Location,Tasks. How do I use s in the code to save an xml file for each table?", to answer this question I would need to know if all the fields Name,Item,Location,Tasks will always be in the same order in the string and whether or not all fields will always be in the string for each table. Basically you would enumerate through the fields in the string and construct an XElement and build the TableX node and then use the XElement.Save() method to save to a file.

If you will be needing help to do this please open a new question.  Thank you.
0
 

Author Comment

by:vcharles
ID: 39605639
Hi,

Yes, all the fileds will alsway be in the same order.  I will open a new questions.

Thanks.
0

Featured Post

Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

Question has a verified solution.

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

More often than not, we developers are confronted with a need: a need to make some kind of magic happen via code. Whether it is for a client, for the boss, or for our own personal projects, the need must be satisfied. Most of the time, the Framework…
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…
If you are looking for an automated solution for backup single or multiple Office 365 user mailboxes to Outlook data file, then you can use Kernel Office 365 Backup & Restore tool. Go through the video to check out the steps to backup single or mult…
Watch the video to learn how one can deal with PST file corruption issue with an outstanding Kernel for Outlook PST Repair Tool easily. Using this tool, non-technical users can swiftly perform the repair process to restore their essential data witho…
Suggested Courses
Course of the Month3 days, 5 hours left to enroll

598 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