C#将数据添加到xml文件

Lon*_*arr 1 c# xmldocument xmlwriter

我正在构建一个Parts应用程序,以便学习C#和WPF.我尝试使用XmlWriter添加新部件时遇到问题.我可以创建xml文件,但无法确定如何添加其他部分.我应该使用像XmlDocument这样的东西吗?这是我的代码背后:

private void btnSave_Click(object sender, RoutedEventArgs e)
    {

        XmlWriterSettings settings = new XmlWriterSettings();
        settings.Encoding = Encoding.UTF8;
        settings.Indent = true;

        using (XmlWriter writer = XmlWriter.Create("f:\\MyParts.xml", settings))
        {
            writer.WriteStartDocument();
            writer.WriteStartElement("MyParts");
            writer.WriteStartElement("parts");
            writer.WriteStartElement("item");
            writer.WriteString(txtbxitem.Text);
            writer.WriteEndElement();

            writer.WriteStartElement("color");
            writer.WriteString(txtbxcolor.Text);
            writer.WriteEndElement();

            writer.WriteStartElement("size");
            writer.WriteString(txtbxsize.Text);
            writer.WriteEndElement();

            writer.WriteEndElement();
            writer.WriteEndDocument();

            writer.Flush();
            writer.Close();

        }
    }
Run Code Online (Sandbox Code Playgroud)

此代码正确创建xml文件和节点,但如何添加其他部分?这是我想要创建的:

 <?xml version="1.0" encoding="ISO-8859-1" ?> 

<MyParts>
  <parts>
    <item>Part1</item>
    <color>Red</color>
    <size>SM</size>
  </parts>
  <parts>
    <item>Part2</item>
    <color>Blue</color>
    <size>XXL</size>
  </parts>
</MyParts>
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

就个人而言,我建议使用LINQ to XML.这是一个使用它容易的API XmlDocument.

但是,是的,如果要修改现有文档,则通常使用内存中表示比使用流API更简单.这是可能做到,当然是后者,但是这并不容易.

这是一个创建相同XML的例子(除了声明之外:你有什么理由想要使用Latin-1而不是像UTF-8那样可以代表整个Unicode,顺便说一下?)

var doc = new XDocument(
  new XElement("MyParts",
    new XElement("parts",
      new XElement("item", "Part1"),
      new XElement("color", "Red"),
      new XElement("size", "SM")),
    new XElement("parts",
      new XElement("item", "Part2"),
      new XElement("color", "Blue"),
      new XElement("size", "XXL"))));
Run Code Online (Sandbox Code Playgroud)

然后,如果你想添加另一部分:

doc.Root.Add(
  new XElement("parts",
    new XElement("item", "Part3"),
    new XElement("color", "Green"),
    new XElement("size", "L")));
Run Code Online (Sandbox Code Playgroud)

不可否认,我希望你想把"创建一个零件元素"位封装到一个方法中,以避免一直重复它......但希望你能得到它.