Eliminando un HtmlNode dentro de un HtmlNode con el HtmlAgilityPack

c# html html-agility-pack nodes removechild

Pregunta

¿Cómo elimino el nodo del número, así como su valor de casa?

Documento :

<number>123456</number>
<house> <number> </number>Red</house>
<house> <number>12</number>Blue</house>
<number>345345</number>
etc...

Código:

private void getHouse(string houseHtml)
{
    HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();

    htmlDoc.Load(new System.IO.StringReader(houseHtml));

    foreach (HtmlAgilityPack.HtmlNode house in htmlDoc.DocumentNode.SelectNodes("//house"))
    {
        MessageBox.Show(house.InnerText);
    }
}

Resultado:

 Red
12Blue

Resultado requerido

Red
Blue

He estado tratando de usar:

house.RemoveChild(house.SelectSingleNode("//number"));

y algunas otras combinaciones de esto y ejecutarse en un "No se encontró el nodo en la colección" o no ocurrirá nada. También seleccionará el número más alto, no el número dentro de la etiqueta de la casa.

Respuesta aceptada

¿Por qué no eliminas los nodos directamente?

var numbers = htmlDoc.DocumentNode.SelectNodes("//house/number");
if (numbers != null) {
    foreach(var node in number) 
        node.Remove();
}

De todos modos, la razón por la que su XPath está seleccionando todos los nodos es porque necesita dar una ruta relativa al nodo actual:

house.SelectSingleNode("//number"); // wrong
house.SelectSingleNode(".//number"); // right


Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow