使用HTMLAgilityPack从Node的子项中选择所有<p>

Den*_*tor 5 c# screen-scraping html-agility-pack

我有以下代码,我用来获取HTML页面.使网址绝对,然后使链接rel nofollow并在新窗口/选项卡中打开.我的问题是在<a>s中添加属性.

        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();
Run Code Online (Sandbox Code Playgroud)

谁能看到我做错了什么?在这里试了一会儿,没有运气.此代码出现,ContentNode.SelectNodes("/ a")未设置为对象的实例.我虽然尝试将蒸汽设置为0?

干杯,丹尼斯

Mar*_*ell 4

一片空白ContentNode?您可能需要在查询中选择 select-single "//*[@id='content']"

对于信息,意味着根处的"/a"所有锚点。有效吗?还有一个可能更容易 - 即。"descendant::a"HtmlElement.GetElementsByTagNameyourElement.GetElementsByTagName("a")

  • 现在一切都来到了 XPath/XSL,后代::为我排序的 iut!谢谢。我知道 / 是根但没有注意到。谢谢 (2认同)