2011-03-12 20 views
0

我試圖在通過observablecollection循環時寫入xml文件。然後我想將格式化的xml傳遞給我的模型,讓它寫入xml文件。以下是我迄今爲止:從ObservableCollection中的項目創建XML

 public void SaveXml(string path) 
    { 
     XElement xml; 
     foreach (var item in Cards) 
     { 
      xml = new XElement("Card", 
        new XAttribute("name", item.Name), 
        new XElement("Type", item.Type), 
        new XElement("Image", 
        new XAttribute("path", item.Image)), 
        new XElement("Usage", item.Usage), 
        new XElement("Quantity", item.Quantity), 
        new XElement("Sell", item.Sell) 
        ); 
     } 
     Game.Model.Deck decks = new Game.Model.Deck(); 
     //decks.SaveXml("writetest.xml", xml); 

這樣,XML文件被替換爲每一個新的節點..我怎麼做,以便它增加了新的項目,以相同的XML的XElement創建一個列表節點發送到我的模型?

在此先感謝!

回答

0

你必須定義一個XML根元素所有Card元素添加到 - 像這樣的工作:

public void SaveXml(string path) 
    { 
    XElement root = new XElement("Cards"); 
    foreach (var item in Cards) 
    { 
     var xml = new XElement("Card", 
       new XAttribute("name", item.Name), 
       new XElement("Type", item.Type), 
       new XElement("Image", 
       new XAttribute("path", item.Image)), 
       new XElement("Usage", item.Usage), 
       new XElement("Quantity", item.Quantity), 
       new XElement("Sell", item.Sell) 
       ); 
     root.Add(xml); 
    } 
    root.Save(path); 
    Game.Model.Deck decks = new Game.Model.Deck(); 
    //decks.SaveXml("writetest.xml", root); 
+0

謝謝,這確實工作! – Stacey 2011-03-12 18:36:23

0

你可以使它更短和更簡單:

var elements = Cards.Select(card => new XElement("Card" /* etc etc */)); 
var doc = new XDocument(elements); 
Game.Model.Deck decks = new Game.Model.Deck(); 
decks.SaveXml("writetest.xml", doc); 
+0

謝謝你們。 - 我有點卡住實際上保存我的XML。這裏是我的方法的代碼:public void SaveXml(string path,XElement xelem){XDocument xmlDoc = XDocument.Load(path); xmlDoc.CreateWriter(); xmlDoc.Root.Add(xelem); xmlDoc.Save(路徑); } – Stacey 2011-03-12 18:32:16

+0

@Stacey:只需使用已有的'XmlElement'或'XDocument'保存XML即可以在我的解決方案中使用root.Save(path);在@Jons解決方案中使用'decks.Save(path)' (路徑應該是一個完整的文件名,例如'C:\ test \ test.xml') – BrokenGlass 2011-03-12 18:36:18

+0

哦,我知道它在做什麼。它正在保存它,但保存到我的調試文件夾中的文件中,而不是我項目中的XML文件。我究竟做錯了什麼? – Stacey 2011-03-12 18:40:37

1

這是我用於將其他位置更新的ObservableCollection保存到.xml文件的確切代碼:

ObservableCollection<Item> items; 
items = (ObservableCollection<Item>)MainWindow.mcv.SourceCollection; 
XmlSerializer serializer = new XmlSerializer(typeof(ObservableCollection<Item>)); 
TextWriter textWriter = new StreamWriter(@"items.xml"); 
serializer.Serialize(textWriter, items); 
textWriter.Close();