Выберите все <p>из дочерних элементов узла, используя HtmlAgilityPack
-
22-09-2019 - |
Вопрос
У меня есть следующий код, который я использую для получения 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") не задан для экземпляра объекта.Я думаю, попробовать установить steam на 0?
Приветствия, Денис
Решение
Является ContentNode
ноль?Возможно, вам потребуется выбрать-single с запросом "//*[@id='content']"
.
Для получения дополнительной информации, "/a"
означает все якоря в корне.делает "descendant::a"
работать?Существует также HtmlElement.GetElementsByTagName
что могло бы быть проще - т. е. yourElement.GetElementsByTagName("a")
.