Member 13123379 Ответов: 1

Как мне получить все конкретные XML-элементы для отображения в поле зрения?


У меня есть XML-файл с некоторыми данными, и я хочу получить все элементы по имени тега "ProjectNr" в контроллере, а затем отправить список для просмотра, показывая номера проектов в выпадающем списке.

Проблема с приведенным ниже кодом заключается в том, что он показывает только последний элемент "ProjectNr", что означает, что он перезаписывает каждый элемент до тех пор, пока он не достигнет конца цикла, а затем остается только последний.

Я пытался сделать так, чтобы он сохранил все элементы, но, похоже, ничего не работает. Я довольно новичок в C#, поэтому уверен, что мне не хватает чего-то простого или я делаю что-то совершенно неправильно. ;-)

Есть ли в этом какой-то смысл?

XML-дерево выглядит следующим образом:

<Activities>
  <Activity>
    <ActivityName>Projekt</ActivityName>
    <ProjectNr>001</ProjectNr>
  </Activity>
  <Activity>
    <ActivityName>Absence</ActivityName>
    <ProjectNr>000</ProjectNr>
  </Activity>
</Activities>


Код в контроллере:

public ActionResult NewActivity()
{
   XElement xelement = XElement.Load(Server.MapPath("/App_Data/ActivitiesData.xml"));
   IEnumerable<XElement> Activity = xelement.Elements();

   foreach (var ProjNrList in Activity)
   {
      List<string> list = new List<string>();
      list.Add(ProjNrList.Element("ProjectNr").Value);

      ViewBag.ProjNrList = list;
      continue;
   }
   return View();
}


Что я уже пробовал:

Я думаю, что перепробовал все, но, очевидно, нет. ;-)
Я пробовал multible loops, linq, readXML и множество других способов получения списка. Не знаю, что попробовать дальше. :-(

CHill60

Попробуйте переместить все, кроме обновления, в список вне цикла, т. е.

List<string> list = new List<string>();
foreach (var ProjNrList in Activity)
{
   list.Add(ProjNrList.Element("ProjectNr").Value);
}
ViewBag.ProjNrList = list;
return View();

Member 13123379

Большое вам спасибо! Я знал, что это было что-то простое...; -) теперь это работает.

[no name]

Вы получаете только последнюю запись, потому что в цикле for вы создаете List<string> list = new List<string>(); каждый раз, когда вы повторяете.

1 Ответов

Рейтинг:
5

Member 13123379

Вот в чем была проблема, и я знаю, почему меня тоже обманули, так как я пытался иметь вещи вне цикла, но не совсем так, как вы это делали. ;-)
Отлично! Спасибо!

<pre>List<string> list = new List<string>();
foreach (var ProjNrList in Activity)
{
   list.Add(ProjNrList.Element("ProjectNr").Value);
}
ViewBag.ProjNrList = list;
return View();


CHill60

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

Member 13123379

Так жаль! Я думал, что должен это сделать. Мои извинения. Больше этого не повторится. :-)