我的XML:
<Bank>
<Customer id="0">
<Accounts>
<Account id="0" />
<Account id="1" />
</Accounts>
</Customer>
<Customer id="1">
<Accounts>
<Account id="0" />
</Accounts>
</Customer>
<Customer id="2">
<Accounts>
<Account id="0" />
</Accounts>
</Customer>
</Bank>
我想添加新的Account元素,让我们说ID为2的客户。我知道如何添加行,我不知道如何指定客户(我在哪里写客户的ID?)
我的LINQ to XML代码:
XDocument document = XDocument.Load("database.xml");
document.Element("Bank").Element("Customer").Element("Accounts").Add
(
new XElement
(
"Account", new XAttribute("id", "variable")
)
);
document.Save("database.xml");
感谢您的帮助。 XML不是我的好朋友:(
答案 0 :(得分:19)
您几乎就在那里,您的代码将默认将元素添加到第一个Customer
。您需要在值为2的客户集合中搜索属性id
document.Element("Bank").Elements("Customer")
.First(c => (int)c.Attribute("id") == 2).Element("Accounts").Add
(
new XElement
(
"Account", new XAttribute("id", "variable")
)
);
答案 1 :(得分:3)
我知道如何添加行,我不知道如何指定客户(我在哪里写客户的ID?)
您需要先找到具有正确ID的Customer
元素。例如:
var customer = document.Root
.Elements("Customer")
.Single(x => (int) x.Attribute("id") == id);
customer.Element("Accounts").Add(new XElement("Account",
new XAttribute("id", "variable")));
请注意,如果没有一个具有正确ID的Single
元素,则Customer
调用将失败。如果你想创建一个新的客户,你需要做更多的工作 - 不管怎么说,无论如何,这将是一个不同的电话。
答案 2 :(得分:0)
var cust = xDoc.Descendants("Customer")
.First(c => c.Attribute("id").Value == "2");
cust.Element("Accounts").Add(new XElement("Account", new XAttribute("id","3") ));