从XML标记中解析和拆分文本

时间:2010-12-10 11:09:24

标签: c# xml silverlight silverlight-4.0 windows-phone-7

我正在接收XML RSS提要。其中一个标签看起来像这样:

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

我需要一种简单的方法将这两个lat和long值提取为单独的值[作为我的其他XML读取foreach循环的一部分..]。

编辑:

我现在正在尝试:

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 个答案:

答案 0 :(得分:5)

这让我觉得这不是真正的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)
             };

答案 1 :(得分:2)

这样的事情

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));