这是我正在使用的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(" ");
我不应该得到这样的结果吗?
牛仔裤10 - T恤10
相反,我得到: 牛仔裤10 - 牛仔裤20 - T恤10 - T恤20 -
这个linq声明错了吗?如何使用来自xml的这些值创建对象?
答案 0 :(得分:1)
我不确定你的最终目标是什么,但我会做这样的事情:
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...
}