我有一个射击问题...... 我有一个xml文件,我想存储在元素列表中。
我希望将此列表展平,以便遵循另一个数据源给出的另一种模式。
这是一个xml示例
<?xml version="1.0" encoding="utf-8" ?>
<Actors>
<Actor FirstName="Will" LastName="Smith">
<Movie name="Men in Black" Date="1999"/>
<Movie name="Wild wild west" Date="1999"/>
<Movie name="Ali" Date="2002"/>
</Actor>
<Actor FirstName="Jason" LastName="Statham">
<Movie name="The Transporter" Date="2002"/>
<Movie name="Revolver" Date="2005"/>
<Movie name="The Bank Job" Date="2008"/>
<Movie name="Transporter 3" Date="2008"/>
</Actor>
</Actors>
然后,我创建了一个我的对象
public class Actors
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Name { get; set; }
public string Date { get; set; }
}
现在,我用这样的xlinq读取这个xml:
private static void Read(string fileName)
{
XDocument testDoc = XDocument.Load(fileName);
var reader = from c in testDoc.Root.Elements()
select c;
var list = reader.ToList();
}
现在我想填写每个项目的List ands,所有数据(FirstName,LastName,Name,Date)必须存在。
我认为Yield return必须解决我的问题,但实际上我并不清楚它是如何工作的。 (我想实施它)
由于
答案 0 :(得分:1)
我想你只想要
List<Actors> actors = (from movie in XDocument.Load(fileName).Descendants("Movie")
select new Actors() {
FirstName = (string)movie.Parent.Attribute("FirstName"),
LastName = (string)movie.Parent.Attribute("LastName")
Name = (string)movie.Attribute("name"),
Date = (string)movie.Attribute("Date")
}).ToList();
答案 1 :(得分:0)
使用此查询
var reader = from a in testDoc.Root.Descendants("Actor")
from m in a.Descendants("Movie")
select new Actors
{
FirstName = a.Attribute("FirstName").Value,
LastName = a.Attribute("LastName").Value,
Name = m.Attribute("name").Value,
Date = m.Attribute("Date").Value
};