[英]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循环内选择子项时,实际上是从文档根目录进行搜索。 真的很烦人。
问题:
有没有办法选择从返回的每个表中的值SelectNodes
,而无需从创建新的文档实例HtmlDocument
?
有没有办法处置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.