2012-01-25 164 views
0

我是新来的XML,我试图得到一些从这个XML文档中的信息: http://pastebin.com/S7eUNmL2获取XML节点数据

使用此代码:

Dim Document As New XmlDocument 
    Document.LoadXml(xml) 
    Dim DocumentElement As XmlElement = Document.DocumentElement 
    Dim ResourceSets As XmlNode = DocumentElement.ChildNodes.ItemOf(6) 
    Dim ResourceSet As XmlNode = ResourceSets.ChildNodes(0) 
    Dim Resource As XmlNode = ResourceSet.ChildNodes(1) 
    Dim LocationList As XmlNodeList = Resource.ChildNodes 
    Dim Location As XmlNode = LocationList.ItemOf(0) 
    Dim Name As String = Location.SelectSingleNode("Name").Value 

但我得到一个对象引用未设置为一个对象的实例。在最后一行代码中出现异常。如果我快速监视位置值是正确的节点,但我在做什么损失......

的XML:

<?xml version="1.0" encoding="utf-8"?> 
<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"> 
    <Copyright> 
    Copyright © 2012 Microsoft and its suppliers. All rights reserved. This API cannot be accessed and the content and any results may not be used, reproduced or transmitted in any manner without express written permission from Microsoft Corporation. 
    </Copyright> 
    <BrandLogoUri> 
    http://dev.virtualearth.net/Branding/logo_powered_by.png 
    </BrandLogoUri> 
    <StatusCode>200</StatusCode> 
    <StatusDescription>OK</StatusDescription> 
    <AuthenticationResultCode>ValidCredentials</AuthenticationResultCode> 
    <TraceId>e0aabdfcf9f746a39a4f3036b319720c|CPKM001259|02.00.83.500|CPKMSNVM001571, CPKMSNVM001585, CPKMSNVM001584, CPKMSNVM001587, CPKMSNVM001527, CPKMSNVM001502, CPKMSNVM001503</TraceId> 
    <ResourceSets> 
    <ResourceSet> 
     <EstimatedTotal>5</EstimatedTotal> 
     <Resources> 
     <Location> 
      <Name>Perth, Australia</Name> 
      <Point> 
      <Latitude>-31.953020095825195</Latitude> 
      <Longitude>115.85723876953125</Longitude> 
      </Point> 
      <BoundingBox> 
      <SouthLatitude>-32.301349639892578</SouthLatitude> 
      <WestLongitude>115.20664978027344</WestLongitude> 
      <NorthLatitude>-31.608610153198242</NorthLatitude> 
      <EastLongitude>116.52772521972656</EastLongitude> 
      </BoundingBox> 
      <EntityType>PopulatedPlace</EntityType> 
      <Address> 
      <AdminDistrict>WA</AdminDistrict> 
      <CountryRegion>Australia</CountryRegion> 
      <FormattedAddress>Perth, Australia</FormattedAddress> 
      <Locality>Perth</Locality> 
      </Address> 
      <Confidence>High</Confidence> 
      <MatchCode>Good</MatchCode> 
      <GeocodePoint> 
      <Latitude>-31.953020095825195</Latitude> 
      <Longitude>115.85723876953125</Longitude> 
      <CalculationMethod>Rooftop</CalculationMethod> 
      <UsageType>Display</UsageType> 
      </GeocodePoint> 
     </Location> 
     <Location> 
      <Name>Perth, Perth and Kinross, United Kingdom</Name> 
      <Point> 
      <Latitude>56.396049499511719</Latitude> 
      <Longitude>-3.4324100017547607</Longitude> 
      </Point> 
      <BoundingBox> 
      <SouthLatitude>56.367079116519164</SouthLatitude> 
      <WestLongitude>-3.5021505233751609</WestLongitude> 
      <NorthLatitude>56.425019882504273</NorthLatitude> 
      <EastLongitude>-3.3626694801343606</EastLongitude> 
      </BoundingBox><EntityType>PopulatedPlace</EntityType> 
      <Address> 
      <AdminDistrict>Scotland</AdminDistrict> 
      <AdminDistrict2>Perth and Kinross</AdminDistrict2> 
      <CountryRegion>United Kingdom</CountryRegion> 
      <FormattedAddress>Perth, Perth and Kinross, United Kingdom</FormattedAddress> 
      <Locality>Perth</Locality> 
      </Address> 
      <Confidence>High</Confidence> 
      <MatchCode>Good</MatchCode> 
      <GeocodePoint> 
      <Latitude>56.396049499511719</Latitude> 
      <Longitude>-3.4324100017547607</Longitude> 
      <CalculationMethod>Rooftop</CalculationMethod> 
      <UsageType>Display</UsageType> 
      </GeocodePoint> 
     </Location> 
     </Resources> 
    </ResourceSet> 
    </ResourceSets> 
</Response> 
+0

你确定你NIT得到一个异常容易过吗? –

+0

我没有得到代码的任何异常,我尝试使用XDocument,但我得到关于WhiteSpace字符的异常。 –

回答

1

从节点中删除该命名空间声明时加载XmlDocument。

Document.LoadXml(xml.Replace("xmlns=""http://schemas.microsoft.com/search/local/ws/rest/v1""","")) 

或者,您也可以使用一个命名空间管理这样的:

Document.LoadXml(xml) 
Dim nsmgr As New XmlNamespaceManager(Document.NameTable) 
nsmgr.AddNamespace("rest", "http://schemas.microsoft.com/search/local/ws/rest/v1") 

然后你可以使用 “休息” 的声明在XPath查询这样的:

Dim Name As String = Location.SelectSingleNode("rest:Name", nsmgr).Value 

见本article在MSDN上。它在部分中提到使用空间数据服务搜索POI,即“要将Bingath Maps REST服务使用XPath查询,必须创建一个XmlNamespaceManager并为REST Services数据模式添加URL。”

当然,如果你只是删除xmlns属性加载文档你可以直接访问XML节点,这在我看来:)