Partilhar via


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.

XElement.RemoveAll

Remove o conteúdo e os atributos de uma classe XElement.

XElement.RemoveAttributes

Remove os atributos de uma classe XElement.

XElement.SetAttributeValue

Se você passar null para o valor, esse método removerá o atributo.

XElement.SetElementValue

Se você passar null para o valor, esse método removerá o elemento filho.

XNode.Remove

Remove uma classe XNode de seu pai.

Extensions.Remove

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.

Consulte também

Outros recursos

Modificando árvores XML (LINQ to XML)