Я новичок в C # и Linq. Я пытаюсь использовать коллекцию элементов, сгенерированную Linq, для итерации и изменения определенных элементов в XDocument. Насколько я понимаю, перечисление не обновляется при обновлении дерева.
Например, с учетом документа
<root xmlns:ns="http://dummy">
<ns:a/>
<ns:b/>
<c/>
<ns:a><ns:a/></ns:a>
</root>
и код
XDocument doc = XDocument.Load(@"test_input.xml", LoadOptions.PreserveWhitespace);
XNamespace ns = "http://dummy";
IEnumerable<XElement> elem_list = from elem in doc.Descendants()
where elem.Name.Namespace == ns
select elem;
foreach (XElement elem in elem_list) {
if (elem.Name.LocalName == "a") {
elem.Remove();
}
}
выдает ошибку, потому что (я думаю) вложенный элемент "a" удален из дерева, но все еще "присутствует" в elem_list.
Как мне обойти это, имея в виду, что (1) реальные манипуляции, которые я хочу сделать, включают более сложные операции (например, копирование) над деревом, чем в приведенном выше примере, и (2) я работаю со смешанным контентом со значительным пробелом? Есть ли у одного из других классов документов .Net XML способ перебора, который обновляется при изменении дерева?