Entfernen von Elementen, Attributen und Knoten aus einem XML-Baum (C#)Removing Elements, Attributes, and Nodes from an XML Tree (C#)

Sie können eine XML-Struktur ändern, indem Sie Elemente, Attribute und andere Knotentypen entfernen.You can modify an XML tree, removing elements, attributes, and other types of nodes.

Das Entfernen eines einzelnen Elements oder Attributs aus einem XML-Dokument ist unkompliziert.Removing a single element or a single attribute from an XML document is straightforward. 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.However, when removing collections of elements or attributes, you should first materialize a collection into a list, and then delete the elements or attributes from the list. Verwenden Sie dazu am besten die Remove-Erweiterungsmethode, die diese Aufgabe für Sie übernimmt.The best approach is to use the Remove extension method, which will do this for you.

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.The main reason for doing this is that most of the collections you retrieve from an XML tree are yielded using deferred execution. 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.If you do not first materialize them into a list, or if you do not use the extension methods, it is possible to encounter a certain class of bugs. Weitere Informationen finden Sie unter Mixed Declarative Code/Imperative Code Bugs (LINQ to XML) (C#) (Fehler durch Vermischung von deklarativem und imperativem Code (LINQ to XML) (C#)).For more information, see Mixed Declarative Code/Imperative Code Bugs (LINQ to XML) (C#).

Die folgenden Methoden entfernen Knoten und Attribute aus einer XML-Struktur.The following methods remove nodes and attributes from an XML tree.

MethodeMethod BeschreibungDescription
XAttribute.Remove Entfernt einen XAttribute aus seinem übergeordneten Knoten.Removes an XAttribute from its parent.
XContainer.RemoveNodes Entfernt die untergeordneten Knoten aus einem XContainer.Removes the child nodes from an XContainer.
XElement.RemoveAll Entfernt Inhalt und Attribute aus einem XElement.Removes content and attributes from an XElement.
XElement.RemoveAttributes Entfernt die Attribute eines XElement.Removes the attributes of an XElement.
XElement.SetAttributeValue Entfernt das Attribut, wenn Sie als Wert null übergeben.If you pass null for value, then removes the attribute.
XElement.SetElementValue Entfernt das untergeordnete Element, wenn Sie als Wert null übergeben.If you pass null for value, then removes the child element.
XNode.Remove Entfernt einen XNode aus seinem übergeordneten Knoten.Removes an XNode from its parent.
Extensions.Remove Entfernt jedes Attribut oder Element in der Quellauflistung aus seinem übergeordneten Element.Removes every attribute or element in the source collection from its parent element.

BeispielExample

BeschreibungDescription

In diesem Beispiel werden drei Ansätze zum Entfernen von Elementen gezeigt.This example demonstrates three approaches to removing elements. Zuerst entfernt das Beispiel ein einzelnes Element.First, it removes a single element. Als Zweites ruft das Beispiel eine Auflistung von Elementen ab, materialisiert sie mit dem Enumerable.ToList-Operator und entfernt die Auflistung.Second, it retrieves a collection of elements, materializes them using the Enumerable.ToList operator, and removes the collection. Zum Schluss ruft das Beispiel eine Auflistung von Elementen ab und entfernt diese mit der Remove-Erweiterungsmethode.Finally, it retrieves a collection of elements and removes them using the Remove extension method.

Weitere Informationen zum ToList-Operator finden Sie unter Konvertieren von Datentypen (C#).For more information on the ToList operator, see Converting Data Types (C#).

CodeCode

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);  

KommentareComments

Dieser Code erzeugt die folgende Ausgabe:This code produces the following output:

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

Beachten Sie, dass das erste Element der zweiten Unterebene aus Child1 entfernt wurde.Notice that the first grandchild element has been removed from Child1. Alle Elemente der zweiten Unterebene wurden aus Child2 und Child3 entfernt.All grandchildren elements have been removed from Child2 and from Child3.

Siehe auchSee Also

Modifying XML Trees (LINQ to XML) (C#) (Ändern von XML-Strukturen (LINQ to XML) (C#))Modifying XML Trees (LINQ to XML) (C#)