Freigeben über


Entfernen von Elementen, Attributen und Knoten aus einer XML-Struktur

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. Verwenden Sie dazu am besten die Remove-Erweiterungsmethode, die diese Aufgabe für Sie übernimmt.

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 Fehler durch Vermischung von deklarativem und imperativem Code (LINQ to XML).

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

Methode

Beschreibung

[M:System.Xml.Linq.XAttribute.Remove()]

Entfernt einen XAttribute aus seinem übergeordneten Knoten.

[M:System.Xml.Linq.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

Entfernt das Attribut, wenn Sie als Wert null übergeben.

XElement.SetElementValue

Entfernt das untergeordnete Element, wenn Sie als 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

Beschreibung

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``1-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 ToList``1-Operator finden Sie unter Konvertieren von Datentypen.

Code

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)

Kommentare

Dieser Code erzeugt die folgende Ausgabe:

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

Beachten Sie, dass das erste Element der zweiten Unterebene aus Child1 entfernt wurde. Alle Elemente der zweiten Unterebene wurden aus Child2 und Child3 entfernt.

Siehe auch

Weitere Ressourcen

Ändern von XML-Strukturen (LINQ to XML)