xNoncombat
xNoncombat

Reputation: 23

Add attribute after existing one

I'm trying to add an attribute after an existing one, but I really don't understand.

The XML format.

<table name="spelers">
  <column name="ID">4565</column>
  <column name="Voornaam">Ivo</column>
  <column name="Achternaam">Dolman</column>
  <column name="SchoolID">5811</column>
</table>

What I try to do, if

column name="Tussenvoegsel">

does not exist is to add it after "Voornaam"

<table name="spelers">
  <column name="ID">4565</column>
  <column name="Voornaam">Ivo</column>
  <column name="Tussenvoegsel"></column>
  <column name="Achternaam">Dolman</column>
  <column name="SchoolID">5811</column>
</table>

My code

XmlDocument doc = new XmlDocument();
doc.Load(@"C:\Users\-\Desktop\Niuew\spelersOUD.xml");

XmlElement root = doc.CreateElement("Voornaam");
XmlElement id = doc.CreateElement("Tussenvoegsel");
id.SetAttribute("Tussenvoegsel", "");
root.AppendChild(id);
doc.Save(@"C:\Users\-\Desktop\Niuew\output.xml"); 

Help is much appreciated, I probably get confused of Elements and Nodes, Root...

Upvotes: 2

Views: 169

Answers (2)

Alex Po
Alex Po

Reputation: 58

If you want to add the node Tussenvoegsel after Voornaam only if it does not already exists you should do something like this:

        XmlDocument doc = new XmlDocument();
        doc.Load(@"C:\Users\-\Desktop\Niuew\spelersOUD.xml");
        var table = doc.ChildNodes[0];
        var voornaam = (XmlElement)table.SelectSingleNode("*[@name='Voornaam']");
        var tussenvoegsel = (XmlElement)table.SelectSingleNode("*[@name='Tussenvoegsel']");
        if (tussenvoegsel == null)
        {
            XmlElement newElement = doc.CreateElement("column");
            newElement.SetAttribute("name", "Tussenvoegsel");
            table.InsertAfter(newElement, voornaam);
        }
        doc.Save(@"C:\Users\-\Desktop\Niuew\output.xml");

Upvotes: 1

Marc Gravell
Marc Gravell

Reputation: 1063501

You need to:

  • identify the node you want to insert after - using SelectSingleNode, for example
  • create a new element (like you did with id)
  • use InsertAfter on the parent of where you want it added - i.e. <table>, the root node

Something like

var table = doc.DocumentElement;
var voornaam = (XmlElement)table.SelectSingleNode("*[@name='Voornaam']");
XmlElement newElement = doc.CreateElement("column");
newElement.SetAttribute("name", "Tussenvoegsel");
table.InsertAfter(newElement, voornaam);

Upvotes: 3

Related Questions