HtmlAgilityPack SelectNodes、Disposing

c# html-agility-pack web-scraping

質問

私は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ループの内側にある子供を選択しようとすると、実際にはドキュメントルートから検索していることに気付いています。本当に迷惑な何か。

質問:

  1. 各テーブルから値を選択するための方法は、そこから返されSelectNodesから新しいドキュメントインスタンスを作成することなく、 HtmlDocument

  2. _document.LoadHtml(html)を使用するたびにメモリリークが発生していることに気付いたので、 HtmlDocumentを処理する方法はありますか。

人気のある回答

(詳細については、「 Html Agility Pack - 問題選択サブノード 」を参照してください)


別のHtmlDocumentオブジェクトを作成したり、別のHTMLを読み込んHtmlDocumentする必要はありません 。あなたはただしなければならない:

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

鍵は、 //tbody .//tbody代わりに.//tbodyを使用すること.//tbody




ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ