Лучший отвечающий
API ВК, парсинг XML C# часть 2

Вопрос
-
В самый первый раз (http://social.msdn.microsoft.com/Forums/ru-RU/winstoreappsru/thread/ece22adc-d5d9-4c4e-b6ea-a6c4fc93f1a2) я получил очень хороший ответ и решил получать содержимое произвольного поста через регулярные выражения т.к. был более менее знаком с ними, но вот незадача: Всё это:
string posts = "<response><post>текст 1</post><post>текст 2</post><post>текст 3</post></response>";
Regex reg = new Regex(@"<post>[\w*\s*]*</post>");
MatchCollection resuts = reg.Matches(posts);
string second_post = resuts[1].Value;
Text.Text = second_post;и это
string ans = await httpClient.GetStringAsync(Uri);
Text.Text = ans;
работает хорошо, но это отказывается работать:
string ans = await httpClient.GetStringAsync(Uri);
Regex reg = new Regex(@"<post>[\w*\s*]*</post>");
MatchCollection resuts = reg.Matches(ans);
string second_post = resuts[1].Value;
Text.Text = second_post;Почему????
P.S. Если нужен ответ от сервера (строка ans) он здесь: http://sdrv.ms/V9RGhK
17 января 2013 г. 16:38
Ответы
-
Что-то сложное придумывать лень, будет работать вот такой синтаксис:
Regex reg = new Regex("<post>(.*?)</post>"); MatchCollection matches = reg.Matches(ans.Replace("\n", ""));
Но, я бы решал эту задачу при помощи тех средств, которые ориентированны на работу с XML. Как, например, вам показали в предыдущем топике.- Изменено Алексей ЛосевEditor 17 января 2013 г. 18:27
- Предложено в качестве ответа Taras KovalenkoBanned 17 января 2013 г. 19:05
- Помечено в качестве ответа Anton Nikishin 17 января 2013 г. 19:17
17 января 2013 г. 18:27Отвечающий -
Не учитывались переносы строк, нет обработки символов <, =, ", /> и других, которые у вас могли находиться между открывающимся и закрывающимся тэгом.
- Помечено в качестве ответа Anton Nikishin 18 января 2013 г. 6:16
18 января 2013 г. 3:15Отвечающий
Все ответы
-
Что-то сложное придумывать лень, будет работать вот такой синтаксис:
Regex reg = new Regex("<post>(.*?)</post>"); MatchCollection matches = reg.Matches(ans.Replace("\n", ""));
Но, я бы решал эту задачу при помощи тех средств, которые ориентированны на работу с XML. Как, например, вам показали в предыдущем топике.- Изменено Алексей ЛосевEditor 17 января 2013 г. 18:27
- Предложено в качестве ответа Taras KovalenkoBanned 17 января 2013 г. 19:05
- Помечено в качестве ответа Anton Nikishin 17 января 2013 г. 19:17
17 января 2013 г. 18:27Отвечающий -
Спасибо вам большое за проделанную для меня работу.
Я тоже так думал и многое попробовал (большие надежды возлогал на XPath и думал, что он мне поможет, но как только дошло до дела, я обломался, в Win Store приложениях отключили его поддержку), ну а затем посмотрев на тот код из прошлой статьи я решил испробовать его, но он мне выдал ошибку о недостатке прав доступа, да и к тому же я почему-то посчитал это способ достаточно ресурсоёмким и подумал, что он будет долго исполнятся на медленных планшетах.
Кстати, в чём заключалась моя ошибка в данном коде:
string ans = await httpClient.GetStringAsync(Uri);
Regex reg = new Regex(@"<post>[\w*\s*]*</post>");
MatchCollection resuts = reg.Matches(ans);
string second_post = resuts[1].Value;
Text.Text = second_post;????
17 января 2013 г. 19:16 -
Не учитывались переносы строк, нет обработки символов <, =, ", /> и других, которые у вас могли находиться между открывающимся и закрывающимся тэгом.
- Помечено в качестве ответа Anton Nikishin 18 января 2013 г. 6:16
18 января 2013 г. 3:15Отвечающий -
Привет
А почему вы вообще используете регулярные выражения в работе с API? Там же можно выбрать формат json, а потом этот json распарсить с помощью специальной библиотеки JSON.NET, и сразу получить желаемый результат, без изобретения своих велосипедов.
Плюсом json является и то, что он менее избыточен (т.е. меньший трафик будет передаваться между api и вашим клиентом)
Мне кажется у вас ошибка в подходе работы с API.
Для связи [mail]
18 января 2013 г. 7:45