При разборе XML с помощью Linq выбирается только один объект - PullRequest
3 голосов
/ 03 июня 2011

Я пытаюсь заполнить массив следующим xml:

<?xml version=\"1.0\" encoding=\"UTF-8\"?>
   <data>
         <item>
              <date>1307018090</date>
              <price>10.4718867</price>
              <low>10.38100000</low>
              <high>10.49000000</high>
              <nicedate>14:39</nicedate>
         </item>
         <item>
              ...
         </item>

и т. Д.

Я использую этот запрос Linq, который для меня означает, что он 'Я создам один объект на:

var items = from item in doc.Element("data").Descendants()
                    select new Currency
                    {
                        Close = item.Element("price").Value.ToString(),
                        Date = item.Element("date").Value.ToString(),
                        Low = item.Element("low").Value.ToString(),
                        High = item.Element("high").Value.ToString(),
                        Time = item.Element("nicedate").Value.ToString()
                    };

И когда я перебираю элементы, выбирается только один элемент.Я не очень привык к Linq, поэтому не могу понять, как правильно построить это утверждение.Есть предложения?

Ответы [ 2 ]

6 голосов
/ 03 июня 2011

Вам нужно запустить Linq-Xml примерно так

var items = 
from item in 
doc.Element("data")
.Elements("item")
1 голос
/ 03 июня 2011

Descedants() метод возвращает не только потомков, но и внуков, внуков и т. Д. Итак, второй тег, который обрабатывается LINQ, - это ваш первый <item> '<date>, и он не' t обработано (я думаю, что здесь должно быть исключение, не могу проверить в данный момент).

Замените ваш Descedants() вызов на Elements("item"), как предложено @ DaveShaw

...