Thread: XML Navigation

  1. #1
    Registered User
    Join Date
    Dec 2003
    Posts
    18

    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

  2. #2
    Registered User Strider's Avatar
    Join Date
    Aug 2001
    Posts
    149
    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
    One Ring to rule them all, One Ring to find them,
    One Ring to bring them all and in the darkness bind them
    In the Land of Mordor where the Shadows lie.

  3. #3
    Registered User
    Join Date
    Dec 2003
    Posts
    18

    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

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Parsing Xml
    By deviousdexter in forum C# Programming
    Replies: 7
    Last Post: 04-24-2009, 06:29 AM
  2. Dissecting an Excel XML spreadsheet
    By desmond5 in forum C++ Programming
    Replies: 1
    Last Post: 05-22-2008, 04:32 PM
  3. XML encoding issue
    By George2 in forum C# Programming
    Replies: 1
    Last Post: 05-16-2008, 05:21 AM
  4. XML and data exchange
    By seexml in forum C Programming
    Replies: 0
    Last Post: 04-27-2006, 03:02 PM
  5. Need help with this xml tree example
    By kzar in forum C Programming
    Replies: 1
    Last Post: 11-22-2004, 11:23 AM