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

您收到空引用异常的原因是您没有处理 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">

有三个命名空间,但其中两个被分配了前缀。你想要的是最后一个:

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 回答