Выберите все <p>из дочерних узлов, используя HTMLAgilityPack - PullRequest
5 голосов
/ 21 января 2010

У меня есть следующий код, который я использую, чтобы получить HTML-страницу. Сделайте URL-адреса абсолютными, а затем сделайте ссылки релевантными и откройте их в новом окне / вкладке. Моя проблема связана с добавлением атрибутов к <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?

Ура, Denis

1 Ответ

4 голосов
/ 21 января 2010

Ноль ContentNode? Вам может потребоваться выбрать single с запросом "//*[@id='content']".

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

...