Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 535
  • Last Modified:

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

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
vcharles
Asked:
vcharles
  • 5
  • 2
  • 2
1 Solution
 
Fernando SotoCommented:
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
 
Ess KayEntrapenuerCommented:
You can use regular expressions

Run a loop with the number of tables

With pattern "<table" & Counter & ">*</table" & Counter & ">"
0
 
Ess KayEntrapenuerCommented:
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
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
vcharlesAuthor Commented:
Thank you for all the comments, will test the code and get back to you.
0
 
vcharlesAuthor Commented:
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
 
vcharlesAuthor Commented:
It works.

Thank You.

Victor
0
 
vcharlesAuthor Commented:
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
 
Fernando SotoCommented:
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
 
vcharlesAuthor Commented:
Hi,

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

Thanks.
0

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

  • 5
  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now