Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据条件将元素插入子节点_C#_Xml_Linq - Fatal编程技术网

C# 根据条件将元素插入子节点

C# 根据条件将元素插入子节点,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

我有以下XML

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还有一次