Removendo elementos, atributos e nós de uma árvore XML
Você pode modificar uma árvore XML, remover elementos, atributos e outros tipos de nós.
Remover um único elemento ou um único atributo de um documento XML é simples. No entanto, ao remover coleções de elementos ou atributos, você deve primeiro materializar uma coleção em uma lista e depois excluir os elementos ou os atributos da lista. A melhor abordagem é usar o método de extensão Remove, que fará isso para você.
O principal motivo para fazer isso é que a maioria das coleções que você recupera de uma árvore XML é gerada usando a execução adiada. Se você não materializar essas coleções primeiro em uma lista, ou não usar os métodos de extensão, poderá encontrar uma determinada classe de bugs. Para obter mais informações, consulte O código declarativo misto/código obrigatório apresenta erros de operação (LINQ te o XML).
Os métodos a seguir removem nós e atributos de uma árvore XML.
Método |
Descrição |
---|---|
[M:System.Xml.Linq.XAttribute.Remove()] |
Remove uma classe XAttribute de seu pai. |
[M:System.Xml.Linq.XContainer.RemoveNodes()] |
Remove os nós filho de uma classe XContainer. |
Remove o conteúdo e os atributos de uma classe XElement. |
|
Remove os atributos de uma classe XElement. |
|
Se você passar null para o valor, esse método removerá o atributo. |
|
Se você passar null para o valor, esse método removerá o elemento filho. |
|
Remove uma classe XNode de seu pai. |
|
Remove cada atributo ou elemento na coleção de origem do respectivo elemento pai. |
Exemplo
Descrição
Este exemplo demonstra três abordagens para remover elementos. Primeiro, ele remove um único elemento. Segundo, ele recupera uma coleção de elementos, materializa essa coleção usando o operador Enumerable.ToList``1 e remove a coleção. Por último, recupera uma coleção de elementos e remove-a usando o método de extensão Remove.
Para obter mais informações sobre o operador ToList``1, consulte Convertendo tipos de dados.
Código
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)
Comentários
Esse código gera a seguinte saída:
<Root>
<Child1>
<GrandChild2 />
<GrandChild3 />
</Child1>
<Child2 />
<Child3 />
</Root>
Observe que o primeiro elemento neto foi removido de Child1. Todos os elementos neto foram removidos de Child2 e de Child3.