保存时添加新的XElement追加整个XML文件,以现有的文件 [英] Adding new XElement appends entire XML file to existing file when saved

查看:508
本文介绍了保存时添加新的XElement追加整个XML文件,以现有的文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果未找到,然后打开它来创建一个新的条目,我创建了一个新的XML文档。但它只是似乎是追加完成新的XML文件,我创建空白文件结尾

创建后:

 < XML版本=1.0编码=UTF-8独立=是&GT?;
<设备/>
 

添加新的XElement后:

 < XML版本=1.0编码=UTF-8独立=是&GT?;
<设备/><?XML版本=1.0编码=UTF-8独立=是>
<设备>
  <装置>
    <名称>&嗒嗒LT; /名称>
    &其中; src00>真&所述; / src00>
  < /装置>
< /设备>
 

我的code ...我已经尝试添加两种不同的方式,两者具有相同的结果。

  //创建文件,如果未找到
            如果(!storage.FileExists(设置\\ mydevices.xml))
            {
                使用(IsolatedStorageFileStream流= storage.OpenFile(设置\\ mydevices.xml,FileMode.Create,FileAccess.ReadWrite))
                {
                    的XDocument devicesDoc =
                        新的XDocument(
                            新XDeclaration(1.0,UTF-8,是),
                            新的XElement(设备)
                            );

                    System.IO.StreamWriter文件=新System.IO.StreamWriter(流);
                    devicesDoc.Save(文件);
                    file.Dispose();
                }
            }


            //添加新设备
            使用(IsolatedStorageFileStream流= storage.OpenFile(设置\\ mydevices.xml,FileMode.Open,FileAccess.ReadWrite))
            {

                的XDocument mydevicesXml = XDocument.Load(流);
                //的XElement项目=新的XElement(设备,
                //新的XElement(名,selectedDeviceName)
                //新的XElement(src00,真)
                //);

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

                mydevicesXml.Root.Add(
                    新的XElement(设备,
                        新的XElement(名,selectedDeviceName)
                        新的XElement(src00,真)));


                System.IO.StreamWriter文件=新System.IO.StreamWriter(流);
                mydevicesXml.Save(文件);
                file.Dispose();
 

解决方案

尝试:

 的XElement根;

如果(File.Exists(文件))
    根= XElement.Load(文件);
其他
    根=新的XElement(设备);

root.Add(新的XElement(设备,
         新的XElement(名,selectedDeviceName)
         新的XElement(src00,真)));
root.Save(文件);
 

I am created a new xml document if one isn't found, then opening it to create a new entry. However it just seems to be appending a completed new XML file to end of the blank file I created

after creation:

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

after adding new 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>

my code ... I've tried adding two different ways, both with the same results

           // 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();

解决方案

Try:

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);

这篇关于保存时添加新的XElement追加整个XML文件,以现有的文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆