2012-11-02 48 views
-1

我有以下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") 
      ) 
    ) 
); 

最終我會想添加到工作臺和日期字段。

我已經試過類似:

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> 

回答

1

原來的OP代碼可能有幾個原因例外:

  1. doc.Element("Schedule").Element("Team").Element("Dates")Element("Schedule")是額外的,如果doc == xe,即Schedule是根xml元素。
  2. .Elements()段是多餘的,如xeDates元素不包含任何的子元素。

的問題是非常混亂給我。不過,我會嘗試推測。

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

謝謝您的回答。你仔細比我以往任何時候都得到了......但問題是,它永遠只能做的第一 ...文件的。 我需要它通過5項過於週期,並添加每個 –

+0

增加預期輸出 –

+0

@AdamSweeney修改我的編輯 – horgh