0

さて、このxmlドキュメントを見ています(http://dev.virtualearth.net/REST/v1/Locations/53.8100,-1.5500?o=xml&key=#

すべてがアプリに正しくダウンロードされますが、ここでエラーが発生し続けます

lang = resultElements.Element("ResourceSets") _ .Element("ResourceSet") _ .Element("Resources") _ .Element("Location") _ .Element("Address") _ .Descendants("PostalCode").Value.ToString()

理由を知っている人はいますか?

4

1 に答える 1

1

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
于 2013-08-08T00:10:07.330 に答える