HTMLアジャイルパックHtmlDocument.DocumentNodeがnullの理由

asp.net c# html-agility-pack

質問

私はこのコードを使ってHTMLストリームのhref属性を変更しています。

まずこのコードを使用してフルHTMLページをダウンロードします:(URLはWebページアドレス)

HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(URL);
HttpWebResponse myHttpWebResponse = 
                         (HttpWebResponse)myHttpWebRequest.GetResponse();

Stream s = myHttpWebResponse.GetResponseStream();

私はこれを処理します:

HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(URL);
HttpWebResponse myHttpWebResponse = 
                         (HttpWebResponse)myHttpWebRequest.GetResponse();

Stream s = myHttpWebResponse.GetResponseStream();

sはhtmlストリームです。

しかし、私はdoc.DocumentNodeがnullであるという例外があります!

私は多くのサイトを試しましたが、 doc.DocumentNodeはnullです

受け入れられた回答

これは私のために働く。

using(WebClient client = new WebClient())
{
    client.Encoding = System.Text.Encoding.UTF8;
    var doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml(client.DownloadString("http://www.google.com?q=stackoverflow"));
    foreach (var href in doc.DocumentNode.Descendants("a").Select(x => x.Attributes["href"]))
    {
        if (href == null) continue;
        href.Value = "http://ahmadalli.somee.com/default.aspx?url=" + HttpUtility.UrlEncode(href.Value);
    }
    StringWriter writer = new StringWriter();
    doc.Save(writer);
    var finalHtml = writer.ToString();
}

URLを正しく取得できるようにするには、 HttpUtility.UrlEncodeも参照してください。そうしないと、元のURLの一部のパラメータが問題を引き起こす可能性があります。

HttpUtility.UrlDecodeを使用してHttpUtility.UrlDecodeをデコードします。


人気のある回答

アンカータグ参照が間違ってエスケープされた文字列です:

...doc.DocumentNode.SelectNodes("/a")    //incorrect
...doc.DocumentNode.SelectNodes("//a")   //correct
...doc.DocumentNode.SelectNodes(@"/a")   //also correct

元のコードはノードを選択できず、nullと評価されます。これは、リンクがまったくない文書(例えばそうではありません:)で失敗しないようにチェックする必要があります。

...doc.DocumentNode.SelectNodes("/a")    //incorrect
...doc.DocumentNode.SelectNodes("//a")   //correct
...doc.DocumentNode.SelectNodes(@"/a")   //also correct



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