Приложение Silverlight WP7 извлекает неверный контент из файла XML - PullRequest
0 голосов
/ 14 ноября 2010

ОБНОВЛЕНИЕ: я предоставил лучший контекст для кода, который я использовал для доступа к содержимому файла XML.

Я создаю приложение для Windows Phone 7, в котором я получаю доступ к онлайн-файлу XML.Однако структура файла заставляет меня вытаскивать из файла неправильные элементы.

Вот общая структура файла:

<?xml version="1.0"?>
<rss version="2.0">
<channel>
  <title>XML File Title</title>
  <link>http://www.url.com</link>
  <description>Description</description>
  <item>
     <title>Title of first item</title>
     <description>Description of first item</description>
  </item>
  <item>
     <title>Title of second item</title>
     <description>Description of second item</description>
  </item>
</channel>

Мой код заставляет менявытащите заголовок и описание из верхней части файла, вместо заголовка и описания в каждом элементе.Вот мой код:

XElement xmlitem = XElement.Parse(e.Result);

        var list = new List<datainfoViewModel>();

        foreach (XElement item in xmlitem.Elements("channel"))

        {
            var title = item.Element("title").Value;
            var description = item.Element("description").Value;


            list.Add(new datainfoViewModel
            {
                Title = title,
                Description = description,
            });

Я знаю, что я делаю неправильно, я просто не уверен, как изменить код, чтобы исправить это.Заранее благодарим за любую помощь, которую вы можете оказать!

Ответы [ 3 ]

2 голосов
/ 14 ноября 2010

Попробовал изменить:

foreach (XElement item in xmlitem.Elements("channel"))

до

foreach (XElement item in xmlitem.Element("channel").Elements("item"))

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

1 голос
/ 14 ноября 2010

Самый простой способ - туннелировать (используя LinqToXml), узел за узлом, чтобы сузить объем вашего запроса, пока у вас не останется коллекция из item элементов.Теперь вы можете выбрать правильные значения.Вот как бы я это сделал:

var xmlitem=
    XDocument.Parse(
        @"<?xml version=""1.0""?><rss version=""2.0""><channel>  <title>XML File Title</title>  <link>http://www.url.com</link>  <description>Description</description>  <item>     <title>Title of first item</title>     <description>Description of first item</description>  </item>  <item>     <title>Title of second item</title>     <description>Description of second item</description>  </item></channel></rss>"
    );
var list =
    xmlitem
        .Element("rss")
        .Element("channel")
        .Elements("item")
        .Select(e=>new datainfoViewModel
            {
                Title=e.Element("title").Value,
                Description=e.Element("description").Value
            }
        )
        .ToList();
0 голосов
/ 14 ноября 2010

Попробуйте свой LINQ в форме, использованной в этом сообщении.

привязка источника данных Linq к списку

Вместо «персона», попросите «элемент».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...