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