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

时间:2012-11-02 02:28:29

标签: 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 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())
           )
        );
}

我没有将Object设置为对象错误的实例。

任何帮助都会很棒

编辑:忘了提到插入会发生循环

我的最终结果将最终结果如下:

<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>

1 个答案:

答案 0 :(得分:1)

原始OP的代码可能有一个例外,原因如下:

  1. doc.Element("Schedule").Element("Team").Element("Dates")Element("Schedule")段是额外的,如果doc == xe,则Schedule是根xml元素。
  2. .Elements()段是额外的,因为Dates中的xe元素不包含任何子元素。
  3. 这个问题让我非常困惑。不过我会尝试推测。

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