使用HtmlAgilityPack删除HtmlNode中的HtmlNode

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