Cela supprime tous les éléments du document:Suppression de nœuds de XDocument
XDocument document = XDocument.Load(inputFile);
foreach (XElement element in document.Elements())
{
element.Remove();
}
document.Save(outputFile);
Cela n'a aucun effet:
XDocument document = XDocument.Load(inputFile);
foreach (XElement element in document.Elements())
{
//element.Remove();
foreach (XElement child in element.Elements())
child.Remove();
}
document.Save(outputFile);
Suis-je manque quelque chose ici? Puisque ce sont toutes des références à des éléments dans le XDocument, les modifications ne devraient-elles pas prendre effet? Existe-t-il un autre moyen de supprimer des enfants imbriqués d'un XDocument?
Merci!
Avez-vous débogué le code? Êtes-vous sûr que element.Elements() renvoie des éléments enfants? Je cherche juste un peu plus d'informations sur exactement ce que vous voyez arriver. – jrista
@jrista Il retourne des éléments enfants, mais le problème semble être que l'énumérateur se comporte différemment après '.Remove()'. – Jake
Oui, c'est ce à quoi je m'attendrais. Les énumérateurs lancent généralement des exceptions lorsque vous modifiez la collection, car ils dépendent beaucoup de la stabilité de la collection sous-jacente pour fonctionner correctement. Je suis vraiment surpris que vous puissiez continuer après avoir supprimé un noeud en utilisant un foreach/énumérateur. Je recommande généralement d'utiliser une boucle while (ou éventuellement pour ... mais c'est plus compliqué), plutôt qu'un foreach. – jrista