Emblemas de búsqueda de problemas del paquete de agilidad HTML

c# html-agility-pack

Pregunta

Estoy tratando de extraer todo lo que reside dentro de un div con un determinado nombre de clase / id. Estoy usando el siguiente código:

var webGet = new HtmlWeb();
var document = webGet.Load("http://www.4guysfromrolla.com/articles/011211-1.aspx");

var partOfWebpage = from completeWebpage in document.DocumentNode.Descendants("div")
                             where
                                 completeWebpage.Attributes["class"].Value == "content" &&
                                 completeWebpage.Attributes["class"].Value != null
                             select completeWebpage.InnerHtml;

foreach (var s in partOfWebpage)
{
    textBox1.AppendText(s);
}

Recibo un error "NullReferenceException no se ha manejado - Referencia de objeto no configurada en una instancia de un objeto" .

Al parecer no encuentra el div en absoluto. Cuando pongo "tabla" en lugar de "div" en el método de Descendientes (), todo funciona bien y puedo elegir una tabla de mi elección con la definición de clase / id.

¿Qué estoy haciendo mal?


Respuesta aceptada

Intente verificar si el atributo existe antes de anular la referencia:

from completeHomepage in document.DocumentNode.Descendants("div")
where completeHomepage.Attributes["class"] != null &&
      completeHomepage.Attributes["class"].Value == "content" &&
      completeHomepage.Attributes["class"].Value != null
select completeHomepage.InnerHtml;

Respuesta popular

Puede usar XPath para seleccionar el div por clase (o por Id si lo necesita).

var results = document.DocumentNode.SelectNodes("//div[@class='content']");



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué