How to add / insert conditional node in XML using linq for XML

I generated the xml file as follows:

XElement employees = new XElement("Work", new XElement("record", new XElement("Name", textBox1.Text), new XElement("Phone", "206-555-0144"), new XElement("Address", new XElement("Street1", "123 Main St"), new XElement("City", "Mercer Island"), new XElement("State", "WA"), new XElement("Postal", "68042") )), new XElement("record", new XElement("Name", "22222"), new XElement("Phone", "353245345"), new XElement("Address", new XElement("Street1", "sdfain St"), new XElement("City", "asdf Island"), new XElement("State", "QLD"), new XElement("Postal", "54322") )), new XElement("record", new XElement("Name", "Peter"), new XElement("Phone", "1234"), new XElement("Address", new XElement("Street1", "sd St"), new XElement("City", "cbr"), new XElement("State", "act"), new XElement("Postal", "2600") ) ) ); 

Later I want to add a new node child under the parent node "record" based on the condition (where name = "peter"), something like this:

 empFile.Elements().Where(r => (string)r.Element("Name") == "Peter") .Add(new XElement("record", new XElement("Mobile", "3253425"), new XElement("Work", 999999) )); 

How can i achieve this?

+6
c # xml linq
source share
2 answers

You are almost there, the Where clause returns an IEnumerable<XElement> not one XElement, so you just need to fix it, that is, call .Single () or .First (), etc.

eg:

 XElement xe = empFile.Elements().Where(r => (string)r.Element("Name") == "Peter").Single(); xe.Add(new XElement("record", new XElement("Mobile", "3253425"), new XElement("Work", 999999)); 
+2
source share

Like Tim’s suggestion of using Where followed by Single or First , it’s worth knowing that there are overloads of those methods that already take predicates. For example:

 empFile.Elements() .Single(r => (string) r.Element("Name") == "Peter") .Add(...); 
+3
source share

All Articles