Entfernen von Elementen, Attributen und Knoten aus einer XML-Struktur
Aktualisiert: November 2007
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 dazu finden Sie unter Fehler durch Vermischung von deklarativem und imperativem Code (C#) (LINQ to XML).
Die folgenden Methoden entfernen Knoten und Attribute aus einer XML-Struktur.
Methode |
Beschreibung |
---|---|
[M:System.Xml.Linq.XAttribute.Remove()] |
Entfernt ein XAttribute aus seinem übergeordneten Attribut. |
[M:System.Xml.Linq.XContainer.RemoveNodes()] |
Entfernt die untergeordneten Knoten aus einem XContainer. |
Entfernt Inhalt und Attribute aus einem XElement. |
|
Entfernt die Attribute eines XElement. |
|
Entfernt das Attribut, wenn Sie als Wert null übergeben. |
|
Entfernt das untergeordnete Element, wenn Sie als Wert null übergeben. |
|
Entfernt einen XNode aus seinem übergeordneten Knoten. |
|
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<TSource>-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<TSource>-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.