Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过使用C添加节点来更新存储文件夹中的xml文件#_C#_Xml_Win Universal App_Windows 10 Universal - Fatal编程技术网

C# 通过使用C添加节点来更新存储文件夹中的xml文件#

C# 通过使用C添加节点来更新存储文件夹中的xml文件#,c#,xml,win-universal-app,windows-10-universal,C#,Xml,Win Universal App,Windows 10 Universal,我正在用C#制作一个通用应用程序,并试图通过添加一些节点来更新存储文件夹中的xml文件。理想情况下,从这样的文件开始 <?xml version="1.0" encoding="UTF-8"?> <MyRoot> <ParentNode> <myNode1>value1</myNode1> <myNode2>value2</myNode2> </ParentNode> </MyRoot>

我正在用C#制作一个通用应用程序,并试图通过添加一些节点来更新存储文件夹中的xml文件。理想情况下,从这样的文件开始

<?xml version="1.0" encoding="UTF-8"?>
<MyRoot>
<ParentNode>
<myNode1>value1</myNode1>
<myNode2>value2</myNode2>
</ParentNode>
</MyRoot>

尝试以下几点:

        XmlDocument doc = new XmlDocument();
        doc.Load("yourfile.xml");

        var root = doc.DocumentElement;

        var parentNode = doc.CreateElement("ParentNode");
        root.AppendChild(parentNode);

        var myNode1 = doc.CreateElement("myNode1");
        myNode1.Value = "value3";
        parentNode.AppendChild(myNode1);

        // ...add more nodes etc...

        doc.Save("yourfile.xml");

尝试以下几点:

        XmlDocument doc = new XmlDocument();
        doc.Load("yourfile.xml");

        var root = doc.DocumentElement;

        var parentNode = doc.CreateElement("ParentNode");
        root.AppendChild(parentNode);

        var myNode1 = doc.CreateElement("myNode1");
        myNode1.Value = "value3";
        parentNode.AppendChild(myNode1);

        // ...add more nodes etc...

        doc.Save("yourfile.xml");

调用
XDocument.Load
后,您位于流的末尾,因此调用
document.Save
将在流的末尾追加新内容

只要只向现有XML添加节点,每次保存时文件都会变长,就可以通过在调用
文档之前移动到流的开头来解决问题。save

document.Root.Add(
    new XElement("ParentNode",
    new XElement("myNode1", "value3"),
    new XElement("myNode2", "value4"))
    );
s.Seek(0, SeekOrigin.Begin); // <-- add this line
document.Save(s);

调用
XDocument.Load
后,您位于流的末尾,因此调用
document.Save
将在流的末尾追加新内容

只要只向现有XML添加节点,每次保存时文件都会变长,就可以通过在调用
文档之前移动到流的开头来解决问题。save

document.Root.Add(
    new XElement("ParentNode",
    new XElement("myNode1", "value3"),
    new XElement("myNode2", "value4"))
    );
s.Seek(0, SeekOrigin.Begin); // <-- add this line
document.Save(s);

非常感谢,您的回答非常有用,因为它还包括“删除节点”场景。非常感谢,您的回答非常有用,因为它还包括“删除节点”场景。我以前使用过xmlDocument,但我遇到了相同的问题,此外,我发现XDocument更容易、更干净。我以前使用过xmlDocument,但我也遇到了同样的问题,而且我发现XDocument更容易、更干净。
document.Root.Add(
    new XElement("ParentNode",
    new XElement("myNode1", "value3"),
    new XElement("myNode2", "value4"))
    );
s.Seek(0, SeekOrigin.Begin); // <-- add this line
document.Save(s);
StorageFile newFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("myFile.xml",
    CreationCollisionOption.ReplaceExisting);