Разбор и разделение текста из тега XML - PullRequest
0 голосов
/ 10 декабря 2010

Я получаю канал RSS RSS. Один из тегов выглядит так:

<georss:point>55.0794503724671 -3.31266344234773</georss:point>

Мне нужен простой способ извлечения этих двух значений lat и long в отдельные значения [как часть моего другого цикла foreach для чтения XML ..].

EDIT:

Я сейчас пытаюсь:

private void OnOpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {
     var document = XDocument.Load(e.Result);

        if (document.Root == null)
            return;

        var georss = XNamespace.Get("http://www.georss.org/georss");

        var events = from ev in document.Descendants("item")

   //how can I define the below for the Value.split?
 //var points = from point in parentElement.Elements(geoRssNs + "point") 


     let values = ev.Value.Split(' ')  

             select new              
           {
             Latitude = double.Parse(values[0], CultureInfo.InvariantCulture),
             Longitude = double.Parse(values[1], CultureInfo.InvariantCulture), 

             Title = (ev.Element("title").Value),
             Description = (ev.Element("description").Value),
             PubDate = (ev.Element("pubDate").Value),
           }; 


             //Add pushpin here            

} }

Ответы [ 2 ]

5 голосов
/ 10 декабря 2010

Меня удивляет, что на самом деле это не XML, а просто обычная обработка строк.Например, это может быть что-то вроде этого:

XNamespace geoRssNs = "http://whatever/url/it/is";

var points = from point in parentElement.Elements(geoRssNs + "point")
             let values = point.Value.Split(' ')
             select new
             {
               Latitude = double.Parse(values[0], CultureInfo.InvariantCulture),
               Longitude = double.Parse(values[1], CultureInfo.InvariantCulture)
             };
2 голосов
/ 10 декабря 2010

как насчет этого

XDocument.Load(e.Result)
    .Descendants("item")
    .Descendants("georss:point")
    .Select(v => v.Value.Split(' '))
    .Select(ll => new GeoCoordinate{Longitude = ll[0], Latitude = ll[1]})
    .Select(g => new Pushpin{ 
        Location = g, 
        Background = (Brush)MediaTypeNames
                    .Application
                    .Current
                    .Resources["PhoneAccentBrush"]})
    .ToList()
    .ForEach(p => QuakeLayer.AddChild(p, p.Location));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...