Compartir a través de


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.

XElement.RemoveAll

Quita el contenido y los atributos de un elemento XElement.

XElement.RemoveAttributes

Quita los atributos de un elemento XElement.

XElement.SetAttributeValue

Si pasa null para el valor, quita el atributo.

XElement.SetElementValue

Si pasa null para el valor, quita el elemento secundario.

XNode.Remove

Quita un elemento XNode de su elemento primario.

Extensions.Remove

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.

Vea también

Otros recursos

Modificar árboles XML (LINQ to XML)