Удаление HtmlNode внутри HtmlNode с помощью HtmlAgilityPack

c# html html-agility-pack nodes removechild

Вопрос

Как удалить номер узла, а также его значение из дома?

Документ :

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

Код:

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);
    }
}

Результат:

 Red
12Blue

Требуемый результат

Red
Blue

Я пытался использовать:

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

и некоторые другие комбинации этого и запустить в «Узел не был найден в коллекции», иначе ничего не произойдет. Он также будет выбирать самый верхний номер, а не номер внутри тега дома.

Принятый ответ

Почему вы не удаляете узлы напрямую?

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

В любом случае, причина, по которой ваш XPath выбирает все узлы, заключается в том, что вам нужно указать путь относительно текущего узла:

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


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow