2012-10-15 107 views
0

我是一個liitle位綠色的節儉xml和linq在c#中。這是我的代碼:如何更新xml元素的集合?

public static void EditConfiguration (DesignConfiguration design) 
    { 
     XDocument configXml = XDocument.Load(configXMLFileName); 
     var updateData = configXml.Root.Elements("Design").Where(element => (String)element.Attribute("name") == design.DesignName).FirstOrDefault(); 

     if (updateData != null) 
     { 
      var myElements = updateData.Elements(); //All the elements under th Design node 
      configXml.Save(configXMLFileName);  
     }    
    } 

在myElements變量有這樣的元件:

<SourceFolder>C:\CSF_Packages</SourceFolder> 
<DestinationFolder>C:\Inetpub</DestinationFolder> 
<CopyLookups>True</CopyLookups> 
<CopyImages>False</CopyImages> 
<ImageSourceFolder>None</ImageSourceFolder> 
<ImageDesinationFolder>None</ImageDesinationFolder> 

我要更新每個用從設計配置對象的值這個元素。這不會是這麼辛苦,如果我曾在一個對象的價值,但也有像這樣的值:

design.SourceFolder design.DesitnationFolder

等(就像元素)。該對象爲以上元素提供新值。很明顯,我認爲我應該用foreach循環,但是當我使用它的結果不是我想要......

這是我的foreach循環:

  foreach (var item in myElements) 
      { 
       item.SetElementValue("SourceFolder", design.SourceFolder); 
      } 

在循環出現只是演示需求的一個元素,但我想把更多的元素放在循環中。這是我所得到的:

<SourceFolder>C:\CSF_Packages<SourceFolder>C:\CSF_Packages</SourceFolder></SourceFolder> 
<DestinationFolder>None<SourceFolder>C:\CSF_Packages</SourceFolder></DestinationFolder> 
<CopyLookups>True<SourceFolder>C:\CSF_Packages</SourceFolder></CopyLookups> 
<CopyImages>False<SourceFolder>C:\CSF_Packages</SourceFolder></CopyImages> 
<ImageSourceFolder>C:\Inetpub<SourceFolder>C:\CSF_Packages</SourceFolder></ImageSourceFolder> 
<ImageDesinationFolder>None<SourceFolder>C:\CSF_Packages</SourceFolder></ImageDesinationFolder> 

我想有:

<SourceFolder>new_value_from the DesignConfiguration object from the SourceFolder property</SourceFolder> 
<DestinationFolder>new_value_from the DesignConfiguration object from the Desitnation Folder property</DestinationFolder> 
<CopyLookups>new_value_from the DesignConfiguration object from the CopyLookups property</CopyLookups> 

等等...... 請幫助的應力noobie :)非常感謝你。

+0

你會得到什麼結果與foreach循環,你會得到什麼結果? –

+0

我已經更新了我的信息,我想要做什麼:) Soryy的那個...... –

+0

最後一個XML的嵌套是完全錯誤的。請修復它。 –

回答

0

您應該刪除子元素XElements,然後將其添加到父級。 試試這些(未測試):

public static void EditConfiguration (DesignConfiguration design) 
{ 
    XDocument configXml = XDocument.Load(configXMLFileName); 
    var updateData = configXml.Root.Elements("Design").Where(element => (String)element.Attribute("name") == design.DesignName).FirstOrDefault(); 

    if (updateData != null) 
    { 
     var myElements = updateData.Elements(); //All the elements under th Design node 
     myElements.Remove(); 
     updateData.SetElementValue("SourceFolder", design.SourceFolder); 
     updateData.SetElementValue("DestinationFolder", design.DestinationFolder); 
     updateData.SetElementValue("CopyLookups", design.CopyLookups); 

     configXml.Save(configXMLFileName); 
    }    
}