无法使用LINQ从Google Geocoding API XML输出中获取address_component元素

本文关键字:获取 输出 address 元素 component XML API LINQ Geocoding Google | 更新日期: 2023-09-27 18:21:23

我试图用C#和ASP.net从Google Geocoding API中获取一些数据。但我在XML响应方面遇到了问题。我得到了有效的XML,并且除了"address_component"元素之外,我还可以得到每个元素。(XML如下所示:http://maps.googleapis.com/...)

    /* data is a string with XML from Google server */            
    XDocument receivedXml = new XDocument();
    receivedXml = XDocument.Parse(data);
    XName address = XName.Get("address_component");
    var root = reciviedXml.Root;              //returns corect XElement
    XElement result = root.Element("result"); //returns corect XElement
    IEnumerable<XElement> components = result.Elements("address_component"); //returns empty collection

这是另一种方式,我试过了,结果也是一样的。

    var results = reciviedXml.Descendants("address_component");

当我试图得到一些类似的后代:

    var types = receivedXml.Descendants("type");

这是空的集合。但我可以成功地获得"result"标记中的另一个元素(如"location"标记)。

谢谢你的建议。

无法使用LINQ从Google Geocoding API XML输出中获取address_component元素

以下内容:

var receivedXml = XDocument.Load("http://maps.googleapis.com/maps/api/geocode/xml?latlng=49.1962253,16.6071422&sensor=false");
Console.WriteLine(receivedXml.Root.Element("result").Elements("address_component").Count());
Console.WriteLine(receivedXml.Descendants("address_component").Count());

分别写入10和28。请确保您使用的是同一个实例-在您的问题中,您使用了receivedXml和receivedXML,因此您可能有两个实例XDocument,其中一个实例可能包含不同的数据。此外,您不需要将XDocument实例化为XDocument。Parse()将为您执行此操作(地址变量似乎未使用)