Это удаляет все элементы из документа:Удаление узлов из XDocument
XDocument document = XDocument.Load(inputFile);
foreach (XElement element in document.Elements())
{
element.Remove();
}
document.Save(outputFile);
Это не имеет никакого эффекта:
XDocument document = XDocument.Load(inputFile);
foreach (XElement element in document.Elements())
{
//element.Remove();
foreach (XElement child in element.Elements())
child.Remove();
}
document.Save(outputFile);
Я пропускаю что-то здесь? Так как это все ссылки на элементы в XDocument, не должны ли изменения вступать в силу? Есть ли другой способ, которым я должен удалять вложенные дети из XDocument?
Спасибо!
Вы отлажена код? Вы уверены, что element.Elements() возвращает дочерние элементы? Просто ищите немного больше информации о том, что именно вы видите. – jrista
@jrista Возвращает дочерние элементы, но проблема, похоже, связана с переходом счетчика по-разному после '.Remove()'. – Jake
Да, это то, чего я ожидал бы. Перечислители обычно генерируют исключения при изменении коллекции, так как они очень зависят от стабильности базовой коллекции для правильной работы. Я действительно удивлен, что вы можете продолжить работу после удаления узла при использовании foreach/enumerator. Обычно я рекомендую использовать цикл while (или, возможно, для ... но это сложнее), а не foreach. – jrista