2012-04-03 20 views
0

以前はhtml agility packを使用していましたが、少し試行錯誤しても良い結果が得られました。私は現在、XPathを使ってノードセットを返すためにこれを使用しようとしています。これは、Firefoxで「XPathをコピー」を右クリックすることによって得られます。私はいくつかの検索をしており、ブラウザーがテーブルタグに "tbody"を追加することが多いことがわかります。私は運がないとこれを削除してそれを試してみました。ここでのFirefoxで私に与えられたXPathは次のとおりです。C#/ Htmlアジリティパックエラー "値はnullにはできません。パラメータ名:ソース"

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

それをAS-使用され、エラーがスローされます:「値はnullにすることはできません。パラメータ名:ソース

これはライン上で発生します。

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

これは誰でも簡単に解決できる場合は、私はまだ読んでいますが、私はヒントをいただきたいと思います。

更新:SelectNodes方法は、XPath式でノードを見つけることができなかった場合、

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

事がある:このエラーは、この行で発生しそうです

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

あなたは、このエラーの原因となるコードを投稿してもらえますか? – Alex

+0

確かに、元の投稿を更新します。 – StatsViaCsh

答えて

4

:これは、実際のコードです渡された場合はnullとなります。詳細については、this answerと類似の質問HTML Agility Pack Nullリファレンスを参照してください。そしてnullオブジェクトのToList()メソッドを呼び出すと、実際にはNullReferenceExceptionが発生します。これは、このようなnullに対して、この変数をチェックしないようにするに

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

実際にエラーが発生します:HtmlDocument htmlDoc = hwObject.Load(AddressString); – StatsViaCsh

+0

@StatsViaCs、それは変です。 'HtmlWeb.Load'が' source'パラメータで 'NullReferenceException'をどのようにスローするのか分かりません。このエラーの原因となった 'AddressString'の値を投稿できますか? – Alex

+0

私の間違いアレックス..本当にあなたが示唆したラインにそれを投げている、私はちょっと離れていた、ごめんなさい。 – StatsViaCsh

関連する問題