C# 根据条件将元素插入子节点
我有以下XMLC# 根据条件将元素插入子节点,c#,xml,linq,C#,Xml,Linq,我有以下XML XElement xe = new XElement("Schedule", new XElement("Team", new XElement("Name", "SomeName"), new XElement("Dates"), new XElement("Game", new XElement("Bench"), new XElemen
XElement xe =
new XElement("Schedule",
new XElement("Team",
new XElement("Name", "SomeName"),
new XElement("Dates"),
new XElement("Game",
new XElement("Bench"),
new XElement("Date")
)
)
);
最后,我想添加到Bench和Date字段
我试过这样的方法:
foreach(Name name in names)
{
doc.Element("Schedule").Element("Team").Element("Dates")
.Elements()
.FirstOrDefault(item => (string)item.Parent.Element("Name") == name.TeamName)
.Add(
new XElement("Game",
new XElement("Bench", "SomeBench"),
new XElement("Date", SomeDate.ToShortDateString())
)
);
}
<Schedule>
<Team>
<Name>SomeName</Name>
<Dates>
<Bench>SomeBench</Bench>
<Date>12/10/2012</Date>
</Dates>
</Team>
<Team>
<Name>SomeName2</Name>
<Dates>
<Bench>SomeBench2</Bench>
<Date>12/13/2012</Date>
</Dates>
</Team>
<Team>
<Name>SomeName3</Name>
<Dates>
<Bench>SomeBench3</Bench>
<Date>12/16/2012</Date>
</Dates>
</Team>
</Schedule>
我得到的对象未设置为对象错误的实例
任何帮助都会很好
编辑:忘了提到插入将与循环一起发生
我的最终结果是:
foreach(Name name in names)
{
doc.Element("Schedule").Element("Team").Element("Dates")
.Elements()
.FirstOrDefault(item => (string)item.Parent.Element("Name") == name.TeamName)
.Add(
new XElement("Game",
new XElement("Bench", "SomeBench"),
new XElement("Date", SomeDate.ToShortDateString())
)
);
}
<Schedule>
<Team>
<Name>SomeName</Name>
<Dates>
<Bench>SomeBench</Bench>
<Date>12/10/2012</Date>
</Dates>
</Team>
<Team>
<Name>SomeName2</Name>
<Dates>
<Bench>SomeBench2</Bench>
<Date>12/13/2012</Date>
</Dates>
</Team>
<Team>
<Name>SomeName3</Name>
<Dates>
<Bench>SomeBench3</Bench>
<Date>12/16/2012</Date>
</Dates>
</Team>
</Schedule>
名字
某个长凳
12/10/2012
某人2
SomeBench2
12/13/2012
某某
某地
12/16/2012
原始OP的代码可能因以下几个原因出现异常:
doc.Element(“Schedule”).Element(“Team”).Element(“Dates”)
中,如果doc==xe
,则段Element(“Schedule”)
是额外的,即Schedule
是根xml元素.Elements()
段是额外的,因为xe
中的Dates
元素不包含任何子元素foreach (var dates in doc.Elements("Team")
.Where(t => names.Any(n => n.TeamName == t.Element("Name").Value))
.Select(t => t.Element("Dates")))
{
dates.Add(
new XElement("Bench", "SomeBench"),
new XElement("Date", SomeDate.ToShortDateString())
);
}
谢谢你的回答。你比我更接近…但问题是它只会做第一件事。。。文件的一部分。我也需要它循环通过5个条目,并添加一个each@AdamSweeney还有一次