我正在嘗試使用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
對象, 也不必在其中加載另一個HTML。你只需要這樣做:
foreach (var table in tables)
{
var value = table.SelectSingleNode(".//tbody[1]/tr/td[0]");
}
關鍵是使用.//tbody
而不是//tbody
。