Entfernen von Elementen, Attributen und Knoten aus einer XML-Struktur (LINQ to XML)

Sie können eine XML-Struktur ändern, indem Sie Elemente, Attribute und andere Knotentypen entfernen.

Das Entfernen eines einzelnen Elements oder Attributs aus einem XML-Dokument ist unkompliziert. Wenn Sie aber Auflistungen von Elementen oder Attributen entfernen, sollten Sie zuerst eine Auflistung in einer Liste materialisieren, bevor Sie die Elemente oder Attribute aus der Liste löschen. Der beste Ansatz besteht darin, die Remove Erweiterungsmethode zu verwenden, um dies zu tun.

Der Hauptgrund für die Verwendung dieses Ansatzes besteht darin, dass die meisten Sammlungen, die Sie aus einer XML-Struktur abrufen, mithilfe der verzögerten Ausführung zurückgegeben werden. Wenn Sie sie nicht zuerst in einer Liste materialisieren oder wenn Sie die Erweiterungsmethoden nicht verwenden, treten möglicherweise eine bestimmte Fehlerklasse auf. Weitere Informationen finden Sie unter Mixed deklarative/imperative Codefehler.

Die folgenden Methoden entfernen Knoten und Attribute aus einer XML-Struktur.

Methode BESCHREIBUNG
XAttribute.Remove Entfernen Sie ein XAttribute Element aus dem übergeordneten Element.
XContainer.RemoveNodes Entfernen sie die untergeordneten Knoten aus einer XContainer.
XElement.RemoveAll Entfernen von Inhalten und Attributen aus einem XElement.
XElement.RemoveAttributes Entfernen sie die Attribute einer XElement.
XElement.SetAttributeValue Entfernen Sie das Attribut, wenn Sie den Wert nullübergeben.
XElement.SetElementValue Entfernen Sie das untergeordnete Element, wenn Sie den Wert nullübergeben.
XNode.Remove Entfernen Sie ein XNode Element aus dem übergeordneten Element.
Extensions.Remove Entfernen Sie jedes Attribut oder Element in der Quellauflistung aus dem übergeordneten Element.

Beispiel: Entfernen eines einzelnen Elements und Entfernen einer Auflistung von Elementen auf zwei Arten

In diesem Beispiel werden drei Ansätze zum Entfernen von Elementen gezeigt. Zuerst entfernt das Beispiel ein einzelnes Element. Zweitens ruft sie eine Auflistung von Elementen ab, materialisiert sie mithilfe des Enumerable.ToList Operators, und entfernt dann die Auflistung. Zum Schluss ruft das Beispiel eine Auflistung von Elementen ab und entfernt diese mit der Remove-Erweiterungsmethode.

Weitere Informationen zum ToList Operator finden Sie unter Konvertieren von Datentypen (C#) und Konvertieren von Datentypen (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)

Dieses Beispiel erzeugt die folgende Ausgabe:

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

Das erste Grandchild-Element wurde aus Child1entfernt, und alle Enkelkinderelemente wurden aus Child2 und aus Child3entfernt.