Victor Charles
asked on
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
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
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
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
"<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
ASKER
Thank you for all the comments, will test the code and get back to you.
ASKER
Hi,
I received error on line. Row is the name of the first table
Dim fileNumber As String = table.Name.ToString().Subs tring(5)
Error:
startIndex cannot be larger than length of string.
Parameter name: startIndex
Dim xdoc = XElement.Load(Application. StartupPat h & "\LinkFinal.xml")
' Get all the tableX nodes and there children
Dim tables = From t In xdoc.Descendants() _
Where t.Name.ToString().StartsWi th("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().Subs tring(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.S tartupPath & fileNumber & ".xml")
I received error on line. Row is the name of the first table
Dim fileNumber As String = table.Name.ToString().Subs
Error:
startIndex cannot be larger than length of string.
Parameter name: startIndex
Dim xdoc = XElement.Load(Application.
' Get all the tableX nodes and there children
Dim tables = From t In xdoc.Descendants() _
Where t.Name.ToString().StartsWi
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().Subs
' 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.S
ASKER
It works.
Thank You.
Victor
Thank You.
Victor
ASKER
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
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
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.
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.
ASKER
Hi,
Yes, all the fileds will alsway be in the same order. I will open a new questions.
Thanks.
Yes, all the fileds will alsway be in the same order. I will open a new questions.
Thanks.
Run a loop with the number of tables
With pattern "<table" & Counter & ">*</table" & Counter & ">"