Odebrání elementů, atributů a uzlů ze stromu XML (LINQ to XML)
Strom XML můžete upravit, odebrat prvky, atributy a další typy uzlů.
Odebrání jednoho prvku nebo jednoho atributu z dokumentu XML je jednoduché. Při odebírání kolekcí prvků nebo atributů byste ale měli nejprve materializovat kolekci do seznamu a potom odstranit prvky nebo atributy ze seznamu. Nejlepším přístupem je použít k tomu metodu Remove rozšíření.
Hlavním důvodem použití tohoto přístupu je to, že většina kolekcí, které načítáte ze stromu XML, se získává pomocí odloženého spuštění. Pokud je nejdříve materializujete do seznamu nebo pokud nepoužíváte rozšiřující metody, můžete narazit na určitou třídu chyb. Další informace naleznete v tématu Smíšené deklarativní nebo imperativní chyby kódu.
Následující metody odeberou uzly a atributy ze stromu XML.
metoda | Popis |
---|---|
XAttribute.Remove | Odeberte z nadřazeného objektu XAttribute . |
XContainer.RemoveNodes | Odeberte podřízené uzly z objektu XContainer. |
XElement.RemoveAll | Odeberte obsah a atributy z objektu XElement. |
XElement.RemoveAttributes | Odeberte atributy objektu XElement. |
XElement.SetAttributeValue | Odeberte atribut, pokud předáte hodnotu null . |
XElement.SetElementValue | Odeberte podřízený prvek, pokud předáte hodnotu null . |
XNode.Remove | Odeberte z nadřazeného objektu XNode . |
Extensions.Remove | Odeberte všechny atributy nebo elementy ve zdrojové kolekci z nadřazeného prvku. |
Příklad: Odebrání jednoho prvku a odebrání kolekce prvků dvěma způsoby
Tento příklad ukazuje tři přístupy k odebrání prvků. Nejprve odebere jeden prvek. Za druhé načte kolekci prvků, materializuje je pomocí operátoru Enumerable.ToList a pak kolekci odebere. Nakonec načte kolekci prvků a odebere je pomocí Remove metody rozšíření.
Další informace o operátoru ToList naleznete v tématu Převod datových typů (C#) a Převod datových typů (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)
Tento příklad vytvoří následující výstup:
<Root>
<Child1>
<GrandChild2 />
<GrandChild3 />
</Child1>
<Child2 />
<Child3 />
</Root>
První prvek vnoučata byl odebrán z Child1
, a všechny prvky vnoučata byly odebrány z Child2
a z Child3
.