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. |
Rimuove il contenuto e gli attributi da un oggetto XElement. |
|
Rimuove gli attributi di un oggetto XElement. |
|
Se viene passato null come valore, rimuove l'attributo. |
|
Se viene passato null come valore, rimuove l'elemento figlio. |
|
Rimuove un oggetto XNode dal relativo elemento padre. |
|
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.