Разобрать XML в массив объектов - с помощью Silverlight / Windows Phone - PullRequest
2 голосов
/ 25 августа 2011

Я вызываю релакс-сервис через метод WebClient для возврата некоторого XML. Затем я хотел бы проанализировать XML, извлечь конкретные поля из каждого узла и превратить его в массив.

У меня есть код, работающий для извлечения XML и заполнения его в списке. По какой-то причине я не могу понять, как превратить это в массив объектов.

Код до сих пор:

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        WebClient wc = new WebClient();
        wc.DownloadStringCompleted += HttpsCompleted;
        wc.DownloadStringAsync(new Uri(requestString));
    }

    private void HttpsCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        if (e.Error == null)
        {
            XDocument xdoc = XDocument.Parse(e.Result, LoadOptions.None);

            var data = from query in xdoc.Descendants("entry")
                       select new DummyClass
                       {
                           Name = (string)query.Element("title"),
                           Kitty = (string)query.Element("countryCode")
                       };
            listBox1.ItemsSource = data;
        }
    }

}

Как я могу превратить каждый узел в объект в массиве?

Большое спасибо заранее! Будет.

РЕДАКТИРОВАТЬ: XML выглядит следующим образом: http://api.geonames.org/findNearbyWikipedia?lat=52.5469285&lng=13.413550&username=demo&radius=20&maxRows=5

<geonames>
<entry>
<lang>en</lang>
<title>Berlin Schönhauser Allee station</title>
<summary>
Berlin Schönhauser Allee is a railway station in the Prenzlauer Berg district of Berlin. It is located on the Berlin U-Bahn line and also on the Ringbahn (Berlin S-Bahn). Build in 1913 by A.Grenander opened as "Bahnhof Nordring" (...)
</summary>
<feature/>
<countryCode>DE</countryCode>
<elevation>54</elevation>
<lat>52.5494</lat>
<lng>13.4139</lng>
<wikipediaUrl>
http://en.wikipedia.org/wiki/Berlin_Sch%C3%B6nhauser_Allee_station
</wikipediaUrl>
<thumbnailImg/>
<rank>93</rank>
<distance>0.2807</distance>
</entry>
</geonames>

1 Ответ

2 голосов
/ 25 августа 2011

Что не так с

// convert IEnumerable linq query to an array
var array = data.ToArray(); // could also use .ToList() for a list
// access like this
MessageBox.Show(array[0].Kitty);

Это даст вам массив DummyClass объектов из IEnumerable<DummyClass>, сгенерированных запросом linq.

Кроме того, массив может даже не потребоваться. Если все, что вам нужно сделать, это перебрать данные, вы можете просто сделать foreach для вашего data объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...