Reputation: 23
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
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
Reputation: 1063501
You need to:
SelectSingleNode
, for exampleid
)InsertAfter
on the parent of where you want it added - i.e. <table>
, the root nodeSomething 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