我试图使用HtmlAgilityPack使用SelectNodes进行一些屏幕抓取,并从返回的每个节点获取一些值。
这是代码
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)时都会出现内存泄漏;发布于 2013-02-24 03:51:59
(有关更详细的解释,请参见https://stackoverflow.com/questions/6181014/html-agility-pack-problem-selecting-subnode/6182495#6182495)
不必创建另一个HtmlDocument对象,也不必将另一个HtmlDocument对象加载到其中。你只需要做:
foreach (var table in tables)
{
var value = table.SelectSingleNode(".//tbody[1]/tr/td[0]");
}关键是使用.//tbody而不是//tbody。
https://stackoverflow.com/questions/15046983
复制相似问题