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

Я пишу приложение, которое читает канал RSS и размещает элементы на карте.Мне нужно читать только латинские и длинные числа из этой строки: http://www.digitalvision.se/feed.aspx?isAlert=true&lat=53.647351&lon=-1.933506. Это содержится в тегах ссылок

Я немного новичок в программировании, но я пишу это в C # / Silverlight, используя Linq to XML.

Должен ли этот текст быть извлеченным при разборе или после разбора и отправлен в класс для этого?Большое спасибо за вашу помощь.

РЕДАКТИРОВАТЬ.Я собираюсь попытаться сделать регулярное выражение в этом

, именно здесь мне нужно интегрировать регулярное выражение где-то в этом коде.Мне нужно взять lat и long из элемента Link и разделить его на две переменные, которые я могу использовать (результаты являются частью цикла 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 ]

1 голос
/ 03 декабря 2010

попробуйте

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"];
1 голос
/ 03 декабря 2010

Если вам нужны только значения Lat и Lon, а фид - это всего лишь одна большая строка 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));
}
...