Supprimer des éléments, des attributs et des nœuds d’une arborescence XML (LINQ to XML)

Vous pouvez modifier une arborescence XML en supprimant des éléments, des attributs et d’autres types de nœuds.

La suppression d'un seul élément ou attribut d'un document XML est simple. Toutefois, lors de la suppression de collections d’éléments ou d’attributs, vous devez tout d’abord matérialiser une collection dans une liste, puis supprimer les éléments ou attributs de la liste. La meilleure approche consiste à utiliser la méthode d’extension Remove.

La principale raison d’utiliser cette approche est que la plupart des collections que vous récupérez à partir d’une arborescence XML sont produites à l’aide de l’exécution différée. Si vous ne les matérialisez pas tout d’abord dans une liste, ou si vous n’utilisez pas les méthodes d’extension, vous pouvez rencontrer une certaine classe de bogues. Pour plus d’informations, consultez Bogues mixtes code déclaratif/impératif.

Les méthodes suivantes suppriment des nœuds et des attributs d’une arborescence XML.

Méthode Description
XAttribute.Remove Supprimez un objet XAttribute de son parent.
XContainer.RemoveNodes Supprimez les nœuds enfants d'un objet XContainer.
XElement.RemoveAll Supprimez le contenu et les attributs d'un objet XElement.
XElement.RemoveAttributes Supprimez les attributs d’un XElement.
XElement.SetAttributeValue Supprimez l’attribut si vous transmettez la valeur null.
XElement.SetElementValue Supprimez l’élément enfant si vous transmettez la valeur null.
XNode.Remove Supprimez un objet XNode de son parent.
Extensions.Remove Supprimez chaque attribut ou élément dans la collection source de son élément parent.

Exemple : Supprimer un seul élément et supprimer une collection d’éléments de deux façons

Cet exemple illustre trois approches de la suppression d'éléments. Tout d'abord, il supprime un seul élément. Ensuite, il récupère une collection d’éléments, les matérialise à l’aide de l’opérateur Enumerable.ToList, puis supprime la collection. Pour finir, il récupère une collection d'éléments et les supprime à l'aide de la méthode d'extension Remove.

Pour plus d’informations sur l’opérateur ToList, consultez Conversion de types de données (C#) et Conversion de types de données (Visual Basic).

XElement root = XElement.Parse(@"<Root>
    <Child1>
        <GrandChild1/>
        <GrandChild2/>
        <GrandChild3/>
    </Child1>
    <Child2>
        <GrandChild4/>
        <GrandChild5/>
        <GrandChild6/>
    </Child2>
    <Child3>
        <GrandChild7/>
        <GrandChild8/>
        <GrandChild9/>
    </Child3>
</Root>");
root.Element("Child1").Element("GrandChild1").Remove();
root.Element("Child2").Elements().ToList().Remove();
root.Element("Child3").Elements().Remove();
Console.WriteLine(root);
Dim root As XElement = _
    <Root>
        <Child1>
            <GrandChild1/>
            <GrandChild2/>
            <GrandChild3/>
        </Child1>
        <Child2>
            <GrandChild4/>
            <GrandChild5/>
            <GrandChild6/>
        </Child2>
        <Child3>
            <GrandChild7/>
            <GrandChild8/>
            <GrandChild9/>
        </Child3>
    </Root>
root.<Child1>.<GrandChild1>.Remove()
root.<Child2>.Elements().ToList().Remove()
root.<Child3>.Elements().Remove()
Console.WriteLine(root)

Cet exemple produit la sortie suivante :

<Root>
  <Child1>
    <GrandChild2 />
    <GrandChild3 />
  </Child1>
  <Child2 />
  <Child3 />
</Root>

Le premier élément petit-enfant a été supprimé de Child1, et tous les éléments petits-enfants ont été supprimés de Child2 et de Child3.