从XML字符串中解析特定文本

时间:2010-12-03 13:36:17

标签: c# silverlight linq-to-xml

我正在编写一个应用程序,它可以读取RSS源并将项目放在地图上。 我只需要从这个字符串中读取纬度和长数: http://www.digitalvision.se/feed.aspx?isAlert=true&lat=53.647351&lon=-1.933506 。这包含在链接标签

我是一个编程菜鸟,但是我使用Linq to XML在C#/ Silverlight中写这个。

解析此文本在解析时或解析后被提取并发送到类来执行此操作? 非常感谢您的帮助。

EDIT。我打算尝试在这个

上做一个正则表达式

这是我需要在此代码中的某个地方集成正则表达式的地方。我需要从Link元素中取lat和long并将其分成两个我可以使用的变量(结果是创建列表的foreach循环的一部分。)

  var events = from ev in document.Descendants("item")
                     select new
                     {
                         Title = (ev.Element("title").Value),
                         Description = (ev.Element("description").Value),
                         Link = (ev.Element("link").Value),
                     };

问题是我不太确定在哪里放正则表达式(一旦我弄清楚如何正确使用正则表达式!:-))

2 个答案:

答案 0 :(得分:1)

如果您只需要Lat和Lon值,并且Feed只是一个大的XML字符串,那么您可以使用正则表达式完成所有操作。

var rssFeed = @"http://www.xxxxxxxxxxxxxx.co.uk/map.aspx?isTrafficAlert=true&lat=53.647351&lon=-1.933506 
                http://www.xxxxxxxxxxxxxx.co.uk/map.aspx?isTrafficAlert=true&lat=53.647352&lon=-1.933507 
                http://www.xxxxxxxxxxxxxx.co.uk/map.aspx?isTrafficAlert=true&lat=53.647353&lon=-1.933508 
                http://www.xxxxxxxxxxxxxx.co.uk/map.aspx?isTrafficAlert=true&lat=53.647354&lon=-1.933509";

var regex = new Regex(@"lat=(?<Lat>[+-]?\d*\.\d*)&lon=(?<Lon>[+-]?\d*\.\d*)");

var latLongPairs = new List<Tuple<decimal, decimal>>();

foreach (Match match in regex.Matches(rssFeed))
{
    var lat = Convert.ToDecimal(match.Groups["Lat"].Value);
    var lon = Convert.ToDecimal(match.Groups["Lon"].Value);
    latLongPairs.Add(new Tuple<decimal, decimal>(lat, lon));
}

答案 1 :(得分:1)

试试这个

var url = "http://www.xxxxxxxxxxxxxx.co.uk/map.aspx?isTrafficAlert=true&lat=53.647351&lon=-1.93350";
var items = url.Split('?')[1]
    .Split('&')
    .Select(i => i.Split('='))
    .ToDictionary(o => o[0], o => o[1]);
var lon = items["lon"];
var lat = items["lat"];