Seleccionar todo

de los hijos de un Nodo que usan HTMLAgilityPack

c# html-agility-pack screen-scraping

Pregunta

Tengo el siguiente código que estoy usando para obtener una página html. Haga que las direcciones URL sean absolutas y, a continuación, haga que los enlaces se actualicen en una ventana o pestaña nueva. Mi problema es sobre la adición de los atributos a los <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();

¿Alguien puede ver lo que estoy haciendo mal? He intentado por un tiempo aquí sin suerte. Este código muestra que ContentNode.SelectNodes ("/ a") no está configurado para una instancia de un objeto. ¿Pensé en intentar poner el vapor a 0?

Saludos, Denis

Respuesta aceptada

¿ ContentNode es nulo? Es posible que deba seleccionar un solo con la consulta "//*[@id='content']" .

Para información, "/a" significa todos los anclajes en la raíz . ¿ "descendant::a" funciona? También hay HtmlElement.GetElementsByTagName que podría ser más fácil, es decir, yourElement.GetElementsByTagName("a") .



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow