Создать объект с помощью linq на Windows Phone - PullRequest
0 голосов
/ 21 ноября 2011

Это образец xml, который я использую:

<?xml version="1.0" encoding="UTF-8"?>
...
<tbody>
<tr class="group">

<td class="team"><span>1</span> <a href="link">Jeans</a></td>
<td class="a">
<p>10</p>
</td>
<td class="b">
<p>20</p>
</td>
<td class="team"><span>1</span> <a href="link">T-shirt</a></td>
<td class="a">
<p>20</p>
</td>
<td class="b">
<p>20</p>
</td>
</tr>

Мне нужно создать объект и заполнить его данными из xml.У меня уже есть класс со всеми необходимыми свойствами, и я использую этот код linq для чтения xml:

var searched = from c in xml.Descendants("tbody").Descendants("tr").Descendants("td").Descendants("a")
                           from cc in xml.Descendants("tbody").Descendants("tr").Descendants("td") where (cc.Attribute("class").Value == "a")
                           select new Time
                           {
                               name = c.Value,
                               data = cc.Value
                           };

Я использую этот foreach для итерации:

foreach (var item in searched)
            {
                listBox1.Items.Add(item.name + item.data);
                listBox1.Items.Add("  ");

ShouldntЯ получаю такой результат?

Джинсы 10 - Футболка 10

Вместо этого я получаю: Джинсы 10 - Джинсы 20 - Футболка 10 - Футболка 20 -

Это утверждение linq неверно?Как я могу создать объект с этими значениями из xml?

1 Ответ

1 голос
/ 21 ноября 2011

Я не уверен, какова ваша конечная цель, но я бы сделал что-то вроде этого:

XElement table = xml.Descendants("tbody").First();

var searched = from c in table.Descendants("tr")
               let team = c.Descendants().First()
               select new
               {
                   Name = team.Descendants("a").First().Value,
                   PG = c.Descendants("td").Where(td => (string)td.Attribute("class") == "tc-pg").First().Value,
                   J = c.Descendants("td").Where(td => (string)td.Attribute("class") == "tc-j").First().Value,
                   V = c.Descendants("td").Where(td => (string)td.Attribute("class") == "tc-v").First().Value,
                   // and so on...
               };

А затем добавьте элементы в список:

foreach (var item in searched)
{
    listBox1.Items.Add(string.Format("{0} - {1}", item.Name, item.PG);
    listBox1.Items.Add(string.Format("{0} - {1}", item.Name, item.J);
    listBox1.Items.Add(string.Format("{0} - {1}", item.Name, item.V);

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