null 参照例外が発生する理由は、XML ドキュメントで名前空間を処理しなかったためです。
<Response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://schemas.microsoft.com/search/local/ws/rest/v1">
名前空間は 3 つありますが、そのうちの 2 つはプレフィックスが割り当てられています。あなたが望むのは最後のものです:
xmlns="http://schemas.microsoft.com/search/local/ws/rest/v1"
次のコードはトリックを行います:
Dim resultElements As XDocument = XDocument.Load("http://dev.virtualearth.net/REST/v1/Locations/53.8100,-1.5500?o=xml&key=AgQtKDaecZ38rUnIbCK_gOTWrOk3a3jLScyr9dfMKD7mRmn0T0c6G9lcay1klMV3")
Dim ns As XNamespace = "http://schemas.microsoft.com/search/local/ws/rest/v1"
Dim lang = (resultElements.Descendants(ns + "PostalCode").FirstOrDefault()).Value
名前空間がある場合、要素名の前に適切な名前空間を追加する必要があります (つまり、ns + "PostalCode")。上記のコード スニペットは、「LS2 9」を返します。
FirstOrDefault()
一致する最初の項目を返すか、一致する項目がない場合はデフォルト値を返します。
郵便番号のコレクションが必要な場合は、FirstOrDefault() を削除して、返されたコレクションを反復処理することもできます。次のようになります。
Dim lang = resultElements.Descendants(ns + "PostalCode")
For Each postalCode As XElement in lang
Console.WriteLine(postalCode.Value)
Next