繁体   English   中英

HtmlAgilityPack SelectNodes,处理

[英]HtmlAgilityPack SelectNodes, Disposing

我正在尝试使用SelectNodes使用HtmlAgilityPack进行一些屏幕抓取,并从返回的每个节点中获取一些值

这是代码

private readonly HtmlDocument _document = new HtmlDocument();

public void ParseValues(string html)
{
    _document.LoadHtml(html);
    var tables = _document.DocumentNode.SelectNodes("//table");

    foreach (var table in tables)
    {
        _document.LoadHtml(table.OuterHtml);
        var value = _document.DocumentNode.SelectSingleNode("//tbody[1]/tr/td[0]");
    }
}

但是我注意到,当尝试在foreach循环内选择子项时,实际上是从文档根目录进行搜索。 真的很烦人。

问题:

  1. 有没有办法选择从返回的每个表中的值SelectNodes ,而无需从创建新的文档实例HtmlDocument

  2. 有没有办法处置HtmlDocument ,因为我注意到每次使用_document.LoadHtml(html)都会发生内存泄漏。

(有关更多详细说明,请参阅Html Agility Pack-选择子节点时出现问题


不必创建另一个HtmlDocument对象,也不HtmlDocument另一个HTML加载到其中。 您只需要做:

foreach (var table in tables)
{
    var value = table.SelectSingleNode(".//tbody[1]/tr/td[0]");
}

关键是使用.//tbody而不是//tbody

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM