Tout sélectionner dans les enfants d'un nœud de
en utilisant HTMLAgilityPack
-
22-09-2019 - |
Question
J'ai le code suivant que j'utilise pour obtenir une page html. Faire les urls absolue et faire les liens rel nofollow et ouvert dans une nouvelle fenêtre / onglet. Ma question est autour de l'ajouter des attributs aux <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();
Quelqu'un peut-il voir ce que je fais mal? Vous connaissez essayer pendant un certain temps ici avec pas de chance. Ce code arrive que ContentNode.SelectNodes ( « / a ») n'est pas définie à une instance d'un objet. Je pensais à essayer de régler la vapeur à 0?
Cordialement, Denis
La solution
est ContentNode
null? Vous devrez peut-être sélectionner-simple avec la "//*[@id='content']"
de requête.
Pour info, "/a"
signifie tous les points d'ancrage à la racine . ne "descendant::a"
travail? Il y a aussi HtmlElement.GetElementsByTagName
qui pourrait être plus facile -. yourElement.GetElementsByTagName("a")
dire