Не удается получить элемент address_component из вывода XML API геокодирования Google с помощью LINQ - PullRequest
0 голосов
/ 25 января 2012

Я пытаюсь получить некоторые данные из API геокодирования Google с C # и ASP.net. Но у меня проблемы с ответом XML. Я получаю действительный XML, и я могу получить элемент evry кроме элемента "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») я могу получить успешно.

Спасибо за любой совет.

1 Ответ

0 голосов
/ 25 января 2012

Следующее:

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, а также reciviedXml, поэтому у вас может быть два экземпляра XDocument, и один из них может содержать разные данные.Также вам не нужно создавать экземпляр XDocument, так как XDocument.Parse () сделает это за вас (и переменная адреса, кажется, не используется)

...