Search code examples
c#xmlxmldocumentxmlnode

How to modify existing XML file with XmlDocument and XmlNode in C#


I already implemented to create the XML file below with XmlTextWriter when application initialization.

And know I don't know how to update the childNode id value with XmlDocument & XmlNode.

Is there some property to update the id value? I tried InnerText but failed. thank you.

<?xml version="1.0" encoding="UTF-8"?>
<Equipment xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <License licenseId="" licensePath=""/>
  <DataCollections>
    <GroupAIDs>
      <AID id="100">
        <Variable id="200"/>
        <Variable id="201"/>
      </AID>
      <AID id="">
        <Variable id="205"/>
      </AID>
      <AID id="102"/>
    </GroupAIDs>
    <GroupBIDs>
      <BID id="2000">
        <AID id="100"/>
      </BID>
      <BID id="2001">
        <AID id="101"/>
        <AID id="102"/>
      </BID>
    </GroupBIDs>
    <GroupCIDs>
      <BID id="8"/>
      <BID id="9"/>
      <BID id="10"/>
    </GroupCIDs>
  </DataCollections>
</Equipment>

Solution

  • You need to do something like this:

    // instantiate XmlDocument and load XML from file
    XmlDocument doc = new XmlDocument();
    doc.Load(@"D:\test.xml");
    
    // get a list of nodes - in this case, I'm selecting all <AID> nodes under
    // the <GroupAIDs> node - change to suit your needs
    XmlNodeList aNodes = doc.SelectNodes("/Equipment/DataCollections/GroupAIDs/AID");
    
    // loop through all AID nodes
    foreach (XmlNode aNode in aNodes)
    {
       // grab the "id" attribute
       XmlAttribute idAttribute = aNode.Attributes["id"];
    
       // check if that attribute even exists...
       if (idAttribute != null)
       {
          // if yes - read its current value
          string currentValue = idAttribute.Value;
    
          // here, you can now decide what to do - for demo purposes,
          // I just set the ID value to a fixed value if it was empty before
          if (string.IsNullOrEmpty(currentValue))
          {
             idAttribute.Value = "515";
          }
       }
    }
    
    // save the XmlDocument back to disk
    doc.Save(@"D:\test2.xml");