0

HTML アジリティ パックを使用して Web サイトをスクレイピングしています。特定のテキストの「a」要素を含むすべての div タグを調べています。サンプルコードは次のとおりです。

 var showLocations = (from div in document.DocumentNode.Descendants("div")
                                 from a in div.DescendantNodes().Where(x => x.Name == "a")
                                 where a.Attributes["href"].Value.Contains("show_locs=Y")
                                 select a).SingleOrDefault();

ただし、要素が見つからない場合は null を返す代わりに、「Null 参照例外」をスローします。何故ですか?

4

2 に答える 2

5

私の推測では、属性の<a>ないタグhref(つまり、リンクではなくアンカー) があると思います。a.GetAttributeValue("href", "").Contains...代わりに試してください。

于 2012-06-22T20:34:24.347 に答える
1

null に評価される可能性のあるさまざまなオブジェクトを扱っており、null チェックを行っていないため、NullReferenceExceptionをスローするものもあります。考えられる犯人:

  1. document.DocumentNode
  2. a.属性["href"]
  3. a.Attributes["href"].Value

問題のオブジェクトがnullにならないことをカプセル化されたクラス内で保証できない限り、扱っているオブジェクトが不明な場合は、nullガードを使用することをお勧めします。

ジミーが彼の回答で指摘したように、あなたが扱っているマークアップは、あなたが求めている要素や属性を持つことが保証されていない可能性が高く、それを保証できない限り、防御的なプログラミングを行う必要があります.

于 2012-06-22T20:36:11.940 に答える