为什么我的方法总是返回null?

时间:2011-10-15 11:01:26

标签: c# xml-parsing linq-to-xml webclient

<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 &#xA9; 2011 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>50230e70257e4ed5a5002a3d4a625c83|LTSM001156|02.00.159.1700|LTSMSNVM001471, LTSMSNVM001477</TraceId>
  <ResourceSets>
    <ResourceSet>
      <EstimatedTotal>1</EstimatedTotal>
      <Resources>
        <Location>
          <Name>1 Microsoft Way, Redmond, WA 98052</Name>
          <Point>
            <Latitude>47.640568390488625</Latitude>
            <Longitude>-122.1293731033802</Longitude>
          </Point>
          <BoundingBox>
            <SouthLatitude>47.636705672917948</SouthLatitude>
            <WestLongitude>-122.137016420622</WestLongitude>
            <NorthLatitude>47.6444311080593</NorthLatitude>
            <EastLongitude>-122.1217297861384</EastLongitude>
          </BoundingBox>
          <EntityType>Address</EntityType>
          <Address>
            <AddressLine>1 Microsoft Way</AddressLine>
            <AdminDistrict>WA</AdminDistrict>
            <AdminDistrict2>King Co.</AdminDistrict2>
            <CountryRegion>United States</CountryRegion>
            <FormattedAddress>1 Microsoft Way, Redmond, WA 98052</FormattedAddress>
            <Locality>Redmond</Locality>
            <PostalCode>98052</PostalCode>
          </Address>
          <Confidence>Medium</Confidence>
        </Location>
      </Resources>
    </ResourceSet>
  </ResourceSets>
</Response>

我的查询以前看起来像:

private void getData()
{
    // Api letőltése
    WebClient webClient = new WebClient();

    string url = "http://dev.virtualearth.net/REST/v1/Locations/" 
                 + _location + "?o=xml&key=App-asdf";

    webClient.DownloadStringCompleted += (s, e) =>
        {
            if (e.Error != null)
                return;

            XDocument xmlLocation = XDocument.Parse(e.Result);

            var ns = XNamespace.Get("http://schemas.microsoft.com/search/local/ws/rest/v1");
            var locality = from q in xmlLocation.Descendants(ns + "Address")
                           select (string)q.Element(ns + "Locality").Value;
        };

    webClient.DownloadStringAsync(new Uri(url));
}

为什么总是返回null

我想查询地点,但我的变量始终包含null。我最近编写了一个类似的程序代码,但它现在有一个命名空间,但不明白问题是什么。

2 个答案:

答案 0 :(得分:1)

我刚刚针对列出的XML运行了查询,它生成了“Redmond”。

所以:打破它。您有通信或线程问题。

    if (e.Error != null)
                return;

是解决地毯问题的好方法。

答案 1 :(得分:0)

var locality = xmlLocation.Descendants(ns + "Locality").Select( x => x.Value);