我有一些XML,我试图用c#导入,看起来像这样:
<root>
<run>
<name = "bob"/>
<date = "1958"/>
</run>
<run>
<name = "alice"/>
<date = "1969"/>
</run>
</root>
我使用
加载我的xmlXElement xDoc=XElement.Load(filename);
我想要的是有一个“run”类,我可以在其中存储名称和日期:
public class RunDetails
{
public RunDetails(XElement xDoc, XNamespace xmlns)
{
var query = from c in xDoc.Descendants(xmlns + "run").Descendants(xmlns + "name") select c;
int i=0;
foreach (XElement a in query)
{
this.name= new NameStr(a, xmlns); // a class for names
Name.Add(this.name); //Name is a List<NameStr>
i++;
}
// Here, i=2, but what I want is a new instance of the RunDetails class for each <run>
}
}
如何设置我的代码以为每个&lt;创建RunDetails类的新实例?运行&gt;,并且只选择&lt;名称&gt;和&lt;日期和GT;在给定的&lt;运行&GT;
答案 0 :(得分:3)
您可以使用LINQ to XML从XML创建IEnumerable。
IEnumerable<RunDetail> runDetails = from run in xdocument.Descendants("run")
select new RunDetail
{
Name = run.Element("name").Value,
Date = int.Parse(run.Element("date").Value)
};
当然,这表明有一个名为RunDetail的类具有公共名称和日期(年份为int)属性。您可以按原样迭代可枚举,或者如果您需要更明确地访问各个成员,可以使用.ToList()或.ToArray()来转换查询。
答案 1 :(得分:1)
你的xml中需要有一些父元素,因为你的元素无效。如果您有以下xml
<root>
<run>
<name = "bob"/>
<date = "1958"/>
</run>
<run>
<name = "alice"/>
<date = "1969"/>
</run>
</root>
您可以将其加载到XDocument并遍历根元素的子元素。对于每个run子元素,您可以创建RunDetails
。