2012-04-03 4 views
0

J'ai déjà utilisé le pack d'agilité html et j'ai eu de bons résultats avec quelques essais et erreurs. J'essaie actuellement de l'utiliser pour retourner un ensemble de nœuds avec un xpath obtenu en cliquant-droit sur "Copier XPath" dans Firefox. J'ai fait quelques recherches, et je vois que le navigateur ajoutera souvent "tbody" pour les tags de table. Je l'ai essayé en enlevant ceci sans aucune chance. Voici le XPath m'a été donnée par Firefox:C#/Html Agility pack error "La valeur ne peut pas être nulle Nom du paramètre: Source."

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

Son utilisation AS- est-lance l'erreur: "valeur ne peut pas être null Nom du paramètre:. La source."

Cela se produit en ligne:

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

Je vais continuer à lire, en attendant, si c'est une solution facile à tout le monde, j'apprécierais un conseil.

Mise à jour: Voici 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(); 
     } 
} 
+0

Pouvez-vous poster un code qui provoque cette erreur? – Alex

+0

Bien sûr, je mettrai à jour le message original. – StatsViaCsh

Répondre

4

Il semble que cette erreur se produit sur cette ligne:

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

La chose est, si SelectNodes méthode ne trouve pas des noeuds par l'expression XPath passé il renvoie null. Vous pouvez trouver plus d'informations dans this answer à une question similaire HTML Agility Pack Null Référence. Et puis vous appelez une méthode ToList() sur un objet null qui provoque effectivement un NullReferenceException.

Pour éviter cette vérification, cette variable la contre null comme ceci:

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

En fait l'erreur se produit sur: HtmlDocument htmlDoc = hwObject.Load (AddressString); – StatsViaCsh

+0

@StatsViaCs, c'est étrange. Je ne vois pas comment 'HtmlWeb.Load' lance une' NullReferenceException' avec le paramètre 'source'. Pourriez-vous poster la valeur de 'AddressString' qui a causé cette erreur? – Alex

+0

Mon erreur Alex .. il le jette effectivement sur la ligne que tu as suggérée, je m'étais un peu éloigné, désolé. – StatsViaCsh

Questions connexes