使用LINQ读取XML的C#代码

4

我的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();
}

问题:

我有一个包含3个属性和另一个类帐户的通用客户列表。我已经能够加载客户数据(id,fname,lname),但我不知道如何从帐户子树中加载任何数据 :(

代码给我一个错误

未处理的类型'System.ArgumentNullException'的异常发生在System.Xml.Linq.dll中-额外的信息:值不能为空。

我尝试了许多代码变体,但我无法使其工作 :( 有人可以向我发布一个有效的代码,以加载帐户子树吗? 非常感谢!


2
将您的 XML <Acount 更改为 <Account 或更改代码 c.Descendants("Acount") - Nesim Razon
谢谢,我写这个的时候很累 :( - Safiron
2个回答

4

你的代码对我有效。但是你在XML中有打字错误 - “Acount”而不是“Account”...


是的,谢谢。我今天早上发现了这个问题 :( 看来太多的编程和少量的睡眠不利于找到错误。 - Safiron

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();

附注:由于您的 XML 中标签名为 Acount,我使用了相同的名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接