编写xml并将其读回c#

Dat*_*ata 5 c# xml xml-parsing

好的,我现在使用文档方法来编写我的 XML 而不是 XmlWriter。我已经用它编写了我的 XML 文件。

userNode = xmlDoc.CreateElement("user");
attribute = xmlDoc.CreateAttribute("age");
attribute.Value = "39";
userNode.Attributes.Append(attribute);
userNode.InnerText = "Jane Doe";
rootNode.AppendChild(userNode);
Run Code Online (Sandbox Code Playgroud)

但问题又是如何读回这些设置。

<users>
  <user name="John Doe" age="42" />
  <user name="Jane Doe" age="39" />
</users>
Run Code Online (Sandbox Code Playgroud)

文件的格式我可以弄清楚如何读取年龄变量,但无法掌握 name 属性。我的 XML 文件与上面略有不同,但差别不大

Ala*_*man 5

逐个元素编写 XML 文件可能非常耗时 - 并且容易出错。

我建议对这种类型的工作使用 XML 序列化程序。

如果您不关心格式 - 并且要求只是能够序列化为 XML 并在以后反序列化,则代码可以如下简单:

public class User
{
    public string Name { get; set; }
    public int Age { get; set; }
}

string filepath = @"c:\temp\users.xml";

var usersToStore = new List<User>
{
     new User { Name = "John Doe", Age = 42 },
     new User { Name = "Jane Doe", Age = 29 }
};

using (FileStream fs = new FileStream(filepath, FileMode.OpenOrCreate))
{
    XmlSerializer serializer = new XmlSerializer(usersToStore.GetType());
    serializer.Serialize(fs, usersToStore);
}

 var retrievedUsers = new List<User>();
 using (FileStream fs2 = new FileStream(filepath, FileMode.Open))
 {
     XmlSerializer serializer = new XmlSerializer(usersToStore.GetType());
     retrievedUsers = serializer.Deserialize(fs2) as List<User>;
 }
Run Code Online (Sandbox Code Playgroud)

Microsoft 在.Net 文档中提供了一些很好的示例- Introducing XML Serialization


Chr*_*der 0

尝试使用System.Xml(使用起来更清晰):

为了节省:

XmlDocument xdoc = new XmlDocument();
...
xdoc.Save("test.xml");
Run Code Online (Sandbox Code Playgroud)

适合阅读:

XmlDocument xdoc = new XmlDocument();
...
xdoc.Load("test.xml");
Run Code Online (Sandbox Code Playgroud)