Выбрать все

от детей узла, используя HTMLAgilityPack

c# html-agility-pack screen-scraping

Вопрос

У меня есть следующий код, который я использую для получения html-страницы. Сделайте URL абсолютным, а затем сделайте ссылки 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();

Может ли кто-нибудь увидеть, что я делаю неправильно? Пробовал некоторое время здесь, не повезло. Этот код показывает, что ContentNode.SelectNodes ("/ a") не установлен в экземпляр объекта. Я хотя попытался установить пар на 0?

Приветствия, Денис

Принятый ответ

Является ли ContentNode нулевым? Вам может потребоваться выбрать-одиночный с запросом "//*[@id='content']" .

Для информации "/a" означает все привязки в корне . делает "descendant::a" работу? Существует также HtmlElement.GetElementsByTagName которое может быть проще - т.е. yourElement.GetElementsByTagName("a") .



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow