Usuwa wszystkie elementy z dokumentu:Usuwanie węzłów z XDocument
XDocument document = XDocument.Load(inputFile);
foreach (XElement element in document.Elements())
{
element.Remove();
}
document.Save(outputFile);
ta nie ma żadnego wpływu:
XDocument document = XDocument.Load(inputFile);
foreach (XElement element in document.Elements())
{
//element.Remove();
foreach (XElement child in element.Elements())
child.Remove();
}
document.Save(outputFile);
Am I brakuje czegoś tutaj? Ponieważ wszystkie są odniesieniami do elementów w XDocument, czy zmiany nie powinny zostać wprowadzone? Czy jest jakiś inny sposób, w jaki powinienem usunąć zagnieżdżone dzieci z XDocument?
Dzięki!
Czy debugowania kodu? Czy na pewno element.Elements() zwraca elementy potomne? Po prostu szukam trochę więcej informacji o tym, co dokładnie się dzieje. – jrista
@jrista Zwraca elementy potomne, ale problem wydaje się być związany z tym, że moduł wyliczający zachowuje się inaczej po '.Remove()'. – Jake
Tak, właśnie tego bym się spodziewał. Enumeratory zazwyczaj generują wyjątki podczas modyfikowania kolekcji, ponieważ są one bardzo zależne od stabilności podstawowej kolekcji, aby działały poprawnie. Jestem naprawdę zaskoczony, że możesz kontynuować po usunięciu węzła podczas używania foreach/enumerator. Generalnie polecam używanie pętli while (lub prawdopodobnie ... ale to jest bardziej skomplikowane), niż foreach. – jrista