Я сгенерировал 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)
));
Как я могу этого добиться?
Вы почти у цели, ваше предложение 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));
Помимо предложения Тима использовать Where
, за которым следует Single
или First
, стоит знать, что существуют перегрузки тех методов, которые уже принимают предикаты. Например:
empFile.Elements()
.Single(r => (string) r.Element("Name") == "Peter")
.Add(...);