我的XML:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Bank>
<Customer id="0">
<FName>Adam</FName>
<LName>Kruz</LName>
<Accounts>
<Acount id="0" money="1500" />
<Acount id="1" money="6500" />
</Accounts>
</Customer>
</Bank>
我的LINQ代码:
private void loadCustomers()
{
customers =
(
from c in XDocument.Load("database.xml").Root.Descendants("Customer")
select
new Customer((int) c.Attribute("id"), (string) c.Element("FName"), (string) c.Element("LName"))
{
accounts =
(
from a in c.Descendants("Account")
select new Account((int) a.Attribute("id"))
{
money = (double) a.Attribute("money")
}
).ToList()
}
).ToList();
}
问题:
我有一个类Customer的通用列表。该类包含3个属性和另一个类Account的通用列表。我已经能够加载客户数据(id,fname,lname),但我不知道如何从Accounts子树加载任何数据:(
代码给我一个错误
System.Xml.Linq.dll中出现未处理的“System.ArgumentNullException”类型异常 - 附加信息:值不能为空。
我一直在尝试代码的许多变种而我无法使其工作:(有人可以给我发一个工作代码如何加载帐户子树吗?非常感谢!
答案 0 :(得分:4)
您的代码适合我。但是您在XML中输入错误 - “Acount”而不是“Account”......
答案 1 :(得分:1)
var xDoc = XDocument.Load("myfile.xml");
var list = xDoc.Descendants("Customer")
.Select(c => new
{
Id=c.Attribute("id").Value,
FName = c.Element("FName").Value,
LName = c.Element("LName").Value,
Accounts = c.Descendants("Acount")
.Select(a => new{
Id= a.Attribute("id").Value,
Money = a.Attribute("money").Value,
})
.ToList()
})
.ToList();
PS:由于xml中的标记名称为Acount
,因此我使用了相同的名称。