2011-03-12 19 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();