【问题标题】:Removing a HtmlNode inside a HtmlNode with the HtmlAgilityPack使用 HtmlAgilityPack 删除 HtmlNode 中的 HtmlNode
【发布时间】:2012-07-20 01:26:53
【问题描述】:

如何从房子中删除数字节点及其值?

文档

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

和其他一些组合并运行到“在集合中找不到节点”或什么都不会发生。它还会选择最上面的数字,而不是房屋标签内的数字。

【问题讨论】:

    标签: c# html html-agility-pack nodes removechild


    【解决方案1】:

    为什么不直接删除节点呢?

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      • 1970-01-01
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      • 2013-05-12
      • 2014-08-15
      相关资源
      最近更新 更多