Freigeben über


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. Am besten verwenden Sie dazu die Remove-Erweiterungsmethode.

Der Hauptgrund für diese Vorgehensweise besteht darin, dass die meisten Auflistungen, die Sie aus einer XML-Struktur abrufen, mit verzögerter Ausführung zurückgegeben werden. Wenn Sie die Auflistungen nicht zunächst in einer Liste materialisieren oder wenn Sie nicht die Erweiterungsmethoden verwenden, kommt es möglicherweise zu einer bestimmten Form von Fehlern. Weitere Informationen finden Sie unter Gemischte deklarative/imperative Code-Fehler.

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

Methode Beschreibung
XAttribute.Remove Entfernt einen XAttribute aus seinem übergeordneten Knoten.
XContainer.RemoveNodes Entfernt die untergeordneten Knoten aus einem XContainer.
XElement.RemoveAll Entfernt Inhalt und Attribute aus einem XElement.
XElement.RemoveAttributes Entfernt die Attribute eines 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 Entfernt einen XNode aus seinem übergeordneten Knoten.
Extensions.Remove Entfernt jedes Attribut oder Element in der Quellauflistung aus seinem ü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. Als Zweites ruft das Beispiel eine Auflistung von Elementen ab, materialisiert sie mit dem Enumerable.ToList-Operator und entfernt die Auflistung. Zum Schluss ruft das Beispiel eine Auflistung von Elementen ab und entfernt diese mit der Remove-Erweiterungsmethode.

Weitere Informationen zum Operator finden Sie unter Konvertieren von ToListDatentypen (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 Enkelelement wurde aus Child1entfernt, und alle Enkelelemente wurden aus Child2 und entfernt Child3.