无法使用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"标记)。
谢谢你的建议。
以下内容:
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()将为您执行此操作(地址变量似乎未使用)