【问题标题】:Adding new XElement appends entire XML file to existing file when saved添加新的 XElement 会在保存时将整个 XML 文件附加到现有文件
【发布时间】:2012-02-23 06:34:17
【问题描述】:

如果找不到,我会创建一个新的 xml 文档,然后打开它以创建一个新条目。然而,它似乎只是将一个完整的新 XML 文件附加到我创建的空白文件的末尾

创建后:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Devices />

添加新的 xelement 后:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Devices /><?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Devices>
  <device>
    <name>blah</name>
    <src00>True</src00>
  </device>
</Devices>

我的代码...我尝试添加两种不同的方法,结果都相同

           // Create file if not found
            if (!storage.FileExists("settings\\mydevices.xml"))
            {
                using (IsolatedStorageFileStream stream = storage.OpenFile("settings\\mydevices.xml", FileMode.Create, FileAccess.ReadWrite))
                {
                    XDocument devicesDoc =
                        new XDocument(
                            new XDeclaration("1.0", "utf-8", "yes"),
                            new XElement("Devices")
                            );

                    System.IO.StreamWriter file = new System.IO.StreamWriter(stream);
                    devicesDoc.Save(file);
                    file.Dispose();
                }
            }


            // Add new device
            using (IsolatedStorageFileStream stream = storage.OpenFile("settings\\mydevices.xml", FileMode.Open, FileAccess.ReadWrite))
            {

                XDocument mydevicesXml = XDocument.Load(stream);
                //XElement item= new XElement("device",
                //                new XElement("name",selectedDeviceName),
                //                new XElement("src00","True")
                //               );

                //mydevicesXml.Descendants("Devices").First().Add(item);
                //mydevicesXml.Element("Devices").Add(item);

                mydevicesXml.Root.Add(
                    new XElement("device",
                        new XElement("name", selectedDeviceName),
                        new XElement("src00", "True")));


                System.IO.StreamWriter file = new System.IO.StreamWriter(stream);
                mydevicesXml.Save(file);
                file.Dispose();

【问题讨论】:

    标签: c# .net xml windows-phone-7 linq-to-xml


    【解决方案1】:

    试试:

    XElement root;
    
    if(File.Exists(file))
        root = XElement.Load(file);
    else
        root = new XElement("Devices");
    
    root.Add(new XElement("device",
             new XElement("name", selectedDeviceName),
             new XElement("src00", "True")));
    root.Save(file);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      • 1970-01-01
      • 2014-08-01
      • 1970-01-01
      相关资源
      最近更新 更多