Tout sélectionner

des enfants d'un nœud utilisant HTMLAgilityPack

c# html-agility-pack screen-scraping

Question

J'ai le code suivant que j'utilise pour obtenir une page HTML. Rendre les urls absolues et ensuite faire les liens rel nofollow et ouvrez dans une nouvelle fenêtre / onglet. Mon problème concerne l'ajout d'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? Cela fait un moment que j'essaye ici sans succès. Ce code indique que ContentNode.SelectNodes ("/ a") n'est pas défini sur une instance d'un objet. Je pensais essayer de régler la vapeur sur 0?

Denis

Réponse acceptée

Est-ce que ContentNode est nul? Vous devrez peut-être sélectionner une seule fois avec la requête "//*[@id='content']" .

Pour info, "/a" signifie toutes les ancres à la racine . est-ce que "descendant::a" fonctionne? Il existe également HtmlElement.GetElementsByTagName qui pourrait être plus facile - à savoir yourElement.GetElementsByTagName("a") .



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi