Condividi tramite


Rimozione di elementi, attributi e nodi da un albero XML

È possibile modificare un albero XML, rimuovendo elementi, attributi e altri tipi di nodi.

La rimozione di un singolo elemento o di un singolo attributo da un documento XML è un processo semplice. Tuttavia, quando si rimuovono raccolte di elementi o attributi, è necessario innanzitutto materializzare una raccolta in un elenco e quindi eliminare gli elementi o gli attributi dall'elenco. L'approccio più efficace prevede l'uso del metodo di estensione Remove, che consente di ottenere questi risultati.

Il motivo principale per cui scegliere questo approccio è che la maggior parte delle raccolte recuperate da un albero XML viene restituita tramite esecuzione posticipata. Se le raccolte non vengono dapprima materializzate in un elenco o se non vengono usati i metodi di estensione, è possibile riscontrare una determinata categoria di bug. Per altre informazioni, vedere Bug derivanti dall'utilizzo combinato di codice dichiarativo/codice imperativo (LINQ to XML).

I metodi seguenti consentono di rimuovere nodi e attributi da un albero XML.

Metodo

Descrizione

[M:System.Xml.Linq.XAttribute.Remove()]

Rimuove un oggetto XAttribute dal relativo elemento padre.

[M:System.Xml.Linq.XContainer.RemoveNodes()]

Rimuove i nodi figlio da un oggetto XContainer.

XElement.RemoveAll

Rimuove il contenuto e gli attributi da un oggetto XElement.

XElement.RemoveAttributes

Rimuove gli attributi di un oggetto XElement.

XElement.SetAttributeValue

Se viene passato null come valore, rimuove l'attributo.

XElement.SetElementValue

Se viene passato null come valore, rimuove l'elemento figlio.

XNode.Remove

Rimuove un oggetto XNode dal relativo elemento padre.

Extensions.Remove

Rimuove ogni attributo o elemento nella raccolta di origine dal relativo elemento padre.

Esempio

Descrizione

In questo esempio sono illustrati tre approcci per la rimozione di elementi. Con il primo viene rimosso un singolo elemento. Con il secondo viene recuperata una raccolta di elementi, che viene materializzata tramite l'operatore Enumerable.ToList``1 e quindi viene rimossa. Infine, viene recuperata una raccolta di elementi che viene rimossa tramite il metodo di estensione Remove.

Per altre informazioni sull'operatore ToList``1, vedere Conversione del tipo di dati.

Codice

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)

Commenti

L'output del codice è il seguente:

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

Si noti che il primo elemento nipote è stato rimosso da Child1. Tutti gli elementi nipote sono stati rimossi da Child2 e da Child3.

Vedere anche

Altre risorse

Modifica di alberi XML (LINQ to XML)