-
XML Navigation
When writing/reading XML in vbScript, everything was easy because I could refer to nodes like an array (ex: main_node[0].sub_node[4]). I am learning C#, and am having problems with XML. All books and resources show me how to write a full file. What if I want to change the value of one element? Let's say I have the following XML file:
<person>
<name>Khelder</name>
<age>21</age>
</person>
<person>
<name>Redlehk</name>
<age>25</age>
</person>
Given the program knows the name "Redlehk", how would you go about reading in his age, and then writing back to the XML file a new age. If anyone can show me how this is done, or point me to a resource, I would greatly appreciate it.
Thanks,
Khelder
-
Here is one way to do it.
Suppose the XML file looks like this:
person.xml
Code:
<?xml version="1.0" encoding="UTF-8"?>
<persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<person>
<name>Khelder</name>
<age>21</age>
</person>
<person>
<name>Redlehk</name>
<age>25</age>
</person>
</persons>
Then this will work:
Code:
using System;
using System.Xml;
namespace XmlTest
{
class XmlTest
{
[STAThread]
static void Main(string[] args)
{
// Load the Xml document
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("person.xml");
// Create an XmlTextWriter from the document
XmlTextWriter writer = new XmlTextWriter("person.xml", null);
writer.Formatting = Formatting.Indented;
// Loop through each person
XmlNodeList personList = xmlDoc.GetElementsByTagName("person");
for(int i = 0; i < personList.Count; i++)
{
XmlElement person = (XmlElement) personList[i];
// Get the person's name
XmlNodeList personNameList = person.GetElementsByTagName("name");
XmlElement personName = (XmlElement) personNameList[0];
// Get the person's age
XmlNodeList personAgeList = person.GetElementsByTagName("age");
XmlElement personAge = (XmlElement) personAgeList[0];
// Compare the data
if (personName.InnerText == "Redlehk")
personAge.InnerText = "44";
}
// Write the changes
xmlDoc.WriteContentTo(writer);
writer.Flush();
writer.Close();
}
}
}
Hope that helps.
David
-
Thanks!
That is exactly what I was looking for. Thank you. Ill try and implement it into my real project tonight, and I'll be back if I have some more questions.
Thanks again,
Khelder