Saltar al contenido

¿Cómo eliminar nodos específicos de un XElement?

Te traemos la solución a esta aprieto, o por lo menos eso pensamos. Si presentas preguntas puedes escribirlo en el apartado de preguntas y con gusto te ayudaremos

Solución:

Puedes probar este enfoque:

var nodes = xRelation.Elements().Where(x => x.Element("Conditions") != null).ToList();

foreach(var node in nodes)
    node.Remove();

Idea básica: no puede eliminar elementos de la colección que está iterando actualmente.
Entonces, primero debe crear una lista de nodos para eliminar y luego eliminar estos nodos.

Puedes usar Linq:

xRelation.Elements()
     .Where(el => el.Elements("Conditions") == null)
     .Remove();

O cree una copia de los nodos para eliminar y elimínelos después (en caso de que el primer método no funcione):

List nodesToDelete = xRelation.Elements().Where(el => el.Elements("Conditions") == null).ToList();

foreach (XElement el in nodesToDeletes)

    // Removes from its parent, but not nodesToDelete, so we can use foreach here
    el.Remove();

He hecho un pequeño ejemplo para ti:

XDocument document = XDocument.Parse(GetXml());
var rulesNode = document.Element("Rules");
if (rulesNode != null)

    rulesNode.Elements("Rule").Where(r => r.Element("Conditions") != null).Remove();

Reseñas y valoraciones

Si piensas que te ha resultado provechoso este artículo, sería de mucha ayuda si lo compartieras con el resto desarrolladores así nos ayudas a difundir nuestra información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *