すべて選択

HTMLAgilityPackを使ってノードの子から送信される

c# html-agility-pack screen-scraping

質問

私は、HTMLページを取得するために使用している次のコードを持っています。 URLを絶対にして、リンクrelをnofollowにして、新しいウィンドウ/タブで開きます。私の問題は、 <a>属性を追加することです。

        string url = "http://www.mysite.com/";
        string strResult = "";            

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        if ((request.HaveResponse) && (response.StatusCode == HttpStatusCode.OK)) {
            using (StreamReader sr = new StreamReader(response.GetResponseStream())) {
                strResult = sr.ReadToEnd();
                sr.Close();
            }
        }

        HtmlDocument ContentHTML = new HtmlDocument();
        ContentHTML.LoadHtml(strResult);
        HtmlNode ContentNode = ContentHTML.GetElementbyId("content");

        foreach (HtmlNode node in ContentNode.SelectNodes("/a")) {
            node.Attributes.Append("rel", "nofollow");
            node.Attributes.Append("target", "_blank");
        }

        return ContentNode.WriteTo();

誰かが私が間違っているのを見ることができますか?ここでは運がないとしばらく試してみた。このコードは、ContentNode.SelectNodes( "/ a")がオブジェクトのインスタンスに設定されていないことを示しています。私はしようと0に蒸気を設定するには?

乾杯、デニス

受け入れられた回答

ContentNodeヌルですか?クエリ"//*[@id='content']" singleを選択する必要があるかもしれません。

情報の場合、 "/a"ルートにあるすべてのアンカー意味します。 "descendant::a"動作しますか?より簡単なHtmlElement.GetElementsByTagNameもあります。つまり、 yourElement.GetElementsByTagName("a")です。



Related

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