как добавить / вставить условный узел в XML с помощью linq to XML

Я сгенерировал XML-файл следующим образом:

 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")
              )
          )
      );

Позже я хочу добавить новый дочерний узел в родительский узел" запись "на основе условия (где name =" peter "), примерно так:

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

Как я могу этого добиться?

7
задан Timwi 23 August 2010 в 05:50
поделиться

2 ответа

Вы почти у цели, ваше предложение Where возвращает IEnumerable , а не один XElement, поэтому вам просто нужно это исправить, т.е. вызвать .Single () или .First () и т. Д.

например:

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
ответ дан 7 December 2019 в 12:13
поделиться

Помимо предложения Тима использовать Where , за которым следует Single или First , стоит знать, что существуют перегрузки тех методов, которые уже принимают предикаты. Например:

empFile.Elements()
       .Single(r => (string) r.Element("Name") == "Peter")
       .Add(...);
3
ответ дан 7 December 2019 в 12:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: