C # / Html Agility pack error "El valor no puede ser nulo. Nombre del parámetro: Fuente."

c#-4.0 html-agility-pack

Pregunta

He usado html agility pack antes y he tenido buenos resultados con un poco de prueba y error. Actualmente estoy intentando usarlo para devolver un conjunto de nodos con una xpath que obtengo al hacer clic con el botón derecho en "Copiar XPath" en Firefox. He hecho algunas búsquedas y veo que el navegador a menudo agrega "tbody" para las etiquetas de tabla. Lo intenté eliminando esto sin suerte. Aquí está la xpath que me dio Firefox:

/html/body/p[3]/table/tbody/tr/td/table/tbody/tr[3]

Usándolo como está, arroja el error: "El valor no puede ser nulo. Nombre del parámetro: fuente " .

Esto ocurre en línea:

nodeList = htmlDoc.DocumentNode.SelectNodes("/html/body/p[3]/table/tbody/tr/td/table/tbody/tr[3]").ToList();

Continuaré leyendo, mientras tanto, si esta es una solución fácil para cualquiera, agradecería una sugerencia.

Actualización: Este es el código real:

protected override List<IDataPoint> ReturnDataPointsFromIndividualAddressString(string AddressString)
{
       List<IDataPoint> earningsAnnouncements = new List<IDataPoint>(); //Not used, yet..

       HtmlWeb hwObject = new HtmlWeb();
       HtmlDocument htmlDoc = hwObject.Load(AddressString);

       if (htmlDoc.DocumentNode != null)
       {
               List<HtmlNode> nodeList = new List<HtmlNode>();
               nodeList = htmlDoc.DocumentNode.SelectNodes("/html/body/p[3]/table/tbody/tr/td/table/tbody/tr[3]").ToList();
       }
}

Respuesta popular

Parece que este error ocurre en esta línea:

nodeList = htmlDoc.DocumentNode.SelectNodes("/html/body/p[3]/table/tbody/tr/td/table/tbody/tr[3]").ToList();

El problema es que si el método SelectNodes no encuentra nodos por la expresión xpath pasada, devuelve un null . Puede encontrar más información en esta respuesta a una pregunta similar Referencia de null del paquete de agilidad HTML . Y luego llama a un método ToList() en un objeto null que en realidad causa una NullReferenceException .

Para evitar esto, compruebe la variable this contra null como esta:

var nodes = htmlDoc.DocumentNode.SelectNodes(...);
if (nodes != null)
{
     nodeList = nodes.ToList();
}


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