使用LINQ获取XDocument的详细信息
本文关键字:详细信息 XDocument 获取 LINQ 使用 | 更新日期: 2023-09-27 18:06:03
我有以下XDocument
<results>
<team id="1" name="Manchester United">
<player name="Ryan Giggs" position="midfielder" />
<player name="Wayne Rooney" position="striker" />
<player name="Rio Ferdinand" position="defender" />
</team>
<team id="2" name="Liverpool">
<player name="Steven Gerrard" position="midfielder" />
<player name="Luis Suarez" position="striker" />
<player name="John Terry" position="defender" />
</team>
<team id="1" name="Manchester City">
<player name="Kolo Toure" position="midfielder" />
<player name="Samuel Eto" position="striker" />
<player name="Vincent Company" position="defender" />
</team>
</results>
,我希望得到所有的数据如下
IEnumerable<Teams> (TeamID and TeamName)
IEnumerable<PLayers> (TeamID, PlayerName, Position)
现在我有下面的
XElement results = doc.Root.Element("results");
var teams =
(from p in results.Descendants("team")
select new
{
Id = utils.GetDecimal(p.Element("id").Value),
TeamName = p.Element("name")
}).ToList();
但是这会抛出一个错误。
那么我的想法是对每个球队做同样的事情,得到球队的球员。
我哪里错了?
-
id
不是元素,它是一个属性 - 你不应该使用
Value
属性,如果没有找到元素,它会抛出异常,而是使用显式强制转换。 -
也为你的球队和球员创建一个类,而不是创建匿名类型。
var teams = (from p in results.Descendants("team") select new { Id = utils.GetDecimal((string)p.Attribute("id")), TeamName = (string)p.Element("name"), Players = p.Elements("player") .Select(x => new { Name = (string)x.Attribute("name"), Position = (string)x.Attribute("position") }) .ToList() }).ToList();