Перебрать возвращенный XML-результат и присвоить значения

В настоящее время я вызываю внешний контроллер MVC и передаю два параметра, которые возвращают XML. Результат того, как я сейчас это делаю, выглядит следующим образом, имейте в виду, что мой опыт работы с XML в значительной степени равен 0

 try
     {
         var url = ConfigurationManager.AppSettings["url"] + String.Format("/ws/RetailerBrandsFiltered?postcode={0}&countryCode={1}", model.Postcode, model.SelectedCountry);

         // Create the request to call the external mvc controller to retrieve the retailers
         var req = (HttpWebRequest)WebRequest.Create(url);
         req.Method = "GET";
         req.ContentType = "xml";

         // Do the request to external controller
         var stIn = new StreamReader(req.GetResponse().GetResponseStream());
         var responce = stIn.ReadToEnd();

         foreach (var item in responce)
         {
             string urn = item["URN"].InnerText
         }

     }
     catch (Exception ex)
     {
         Console.WriteLine(ex);
     }

Я пытаюсь просмотреть ответ и получить узлы XML и назначить их модели (которую я еще не реализовал), но для тестирования я пытаюсь получить первое значение и присвоить его строке.

Что не работает, сообщение «Невозможно применить индексацию к типу char», в идеале мой цикл for будет выглядеть примерно так.

 foreach (var item in responce)
 {
     string urn = item["URN"].InnerText;
     string name = item["NAME"].InnerText;
     string address = item["ADDRESS"].InnerText;
 }

Опять же, как только это сработает, я заменю строку на привязку модели. любая помощь будет оценена


person Code Ratchet    schedule 07.01.2015    source источник
comment
Следите за типами. ответ представляет собой строку. Итак, элемент — это просто символ из строки.   -  person Justin Pihony    schedule 07.01.2015
comment
@JustinPihony извините, не понимаю, что вы имеете в виду?   -  person Code Ratchet    schedule 07.01.2015
comment
stackoverflow.com/questions/4842038/ должен решить вашу проблему. Прямо сейчас вы просто читаете простую строку   -  person Justin Pihony    schedule 07.01.2015


Ответы (1)


Переменная reponce является строкой, и когда вы пытаетесь выполнить итерацию по ней, вы неявно приводите строку к char[] и выполняете итерацию по ней.

Загрузите поток в XDocument и используйте Linq для получения значений:

try
{
     var url = ConfigurationManager.AppSettings["url"] + string.Format("/ws/RetailerBrandsFiltered?postcode={0}&countryCode={1}", model.Postcode, model.SelectedCountry);

     // Create the request to call the external mvc controller to retrieve the retailers
     var req = (HttpWebRequest)WebRequest.Create(url);
     req.Method = "GET";
     req.ContentType = "xml";

     // Do the request to external controller
     var xDoc = XDocument.Load(req.GetResponse().GetResponseStream());

     // Get some nodes
     var items = xDoc.Descendants("item");

     foreach(var item in items)
     {
         string urn = item.Element("URN").Single().Value;
         // Do more stuff
     }

 }
 catch (Exception ex)
 {
     Console.WriteLine(ex);
 }

См. статью MSDN и этот вопрос о переполнении стека для более подробной информации.

person Jon G Stødle    schedule 07.01.2015