Erreur du pack d'agilité C # / Html "La valeur ne peut pas être nulle. Nom du paramètre: Source."

c#-4.0 html-agility-pack

Question

J'ai déjà utilisé le pack d'agilité html auparavant, et j'ai obtenu de bons résultats avec quelques essais et erreurs. J'essaie actuellement de l'utiliser pour renvoyer un ensemble de nœuds avec un xpath obtenu en faisant un clic droit sur "Copier XPath" dans Firefox. J'ai effectué des recherches et je constate que le navigateur ajoute souvent "tbody" aux balises de table. Je l'ai essayé avec l'enlever sans succès. Voici le xpath donné par Firefox:

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

En l'utilisant, le message d'erreur suivant est émis: "La valeur ne peut pas être nulle. Nom du paramètre: source. "

Cela se produit en ligne:

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

Je continuerai à lire, entre-temps, s'il s'agit d'une solution facile à qui que ce soit, j'aimerais un conseil.

Mise à jour: Ceci est le code actuel:

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();
       }
}

Réponse populaire

Il semble que cette erreur se produise sur cette ligne:

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

Le problème est que, si la méthode SelectNodes ne trouve pas les nœuds avec l'expression xpath transmise, elle renvoie la valeur null . Vous trouverez plus d'informations à ce sujet dans cette réponse à une question similaire HTML Agility Pack Null Reference . Et ensuite, vous appelez une méthode ToList() sur un objet null qui provoque en réalité une NullReferenceException .

Pour éviter cela, vérifiez cette variable avec null comme ceci:

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



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