Quitar elementos, atributos y nodos de un árbol XML
Actualización: November 2007
Puede modificar un árbol XML mediante la eliminación de elementos, atributos y otros tipos de nodos.
Quitar un elemento o un atributo de un documento XML resulta sencillo. Sin embargo, al quitar colecciones de elementos o atributos, primero debe materializar una colección en una lista y, a continuación, eliminar los elementos o los atributos de ésta. El mejor método consiste en usar el método de extensión Remove, que se ocupará de todo esto.
El motivo principal radica en que la mayoría de las colecciones que se recuperan de un árbol XML se producen con una ejecución aplazada. Si no las materializa primero en una lista, o bien si no usa los métodos de extensión, es posible que aparezca una clase determinada de errores. Para obtener más información, vea Errores en códigos declarativos/imperativos mixtos (C#) (LINQ to XML).
Los siguientes métodos sirven para quitar nodos y atributos de un árbol XML.
Método |
Descripción |
---|---|
[M:System.Xml.Linq.XAttribute.Remove()] |
Quita un elemento XAttribute de su elemento primario. |
[M:System.Xml.Linq.XContainer.RemoveNodes()] |
Quita los nodos secundarios de un elemento XContainer de la colección. |
Quita el contenido y los atributos de un elemento XElement. |
|
Quita los atributos de un elemento XElement. |
|
Si pasa null para el valor, quita el atributo. |
|
Si pasa null para el valor, quita el elemento secundario. |
|
Quita un elemento XNode de su elemento primario. |
|
Quita todos los atributos o elementos de la colección de origen de su elemento primario. |
Ejemplo
Descripción
Este ejemplo demuestra tres métodos para quitar elementos. Primero, quita un solo elemento. En segundo lugar, recupera una colección de elementos, los materializa con el operador Enumerable.ToList<TSource> y quita la colección. Por último, recupera una colección de elementos y los quita con el método de extensión Remove.
Para obtener más información acerca del operador ToList<TSource>, vea Convertir tipos de datos.
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)
Comentarios
Este código genera el siguiente resultado:
<Root>
<Child1>
<GrandChild2 />
<GrandChild3 />
</Child1>
<Child2 />
<Child3 />
</Root>
Tenga en cuenta que el primer elemento descendiente del secundario se ha quitado de Child1. Todos los elementos descendientes del secundario se han quitado de Child2 y Child3.