编写xml并将其读回c#

时间:2017-06-10 20:25:03

标签: c# xml xml-parsing

好的,我现在使用document方法编写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);

但问题是如何重新阅读这些设置。

<users>
  <user name="John Doe" age="42" />
  <user name="Jane Doe" age="39" />
</users>

文件的格式我可以弄清楚如何阅读年龄变量但无法获取name属性。我的XML文件与上面略有不同,但不是很多

3 个答案:

答案 0 :(得分:3)

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

我建议使用XML Serializer来完成这类工作。

如果您不关心格式 - 并且要求只是能够序列化为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>;
 }

Microsoft在.Net documentation - Introducing XML Serialization

中提供了一些很好的示例

答案 1 :(得分:0)

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

保存:

XmlDocument xdoc = new XmlDocument();
...
xdoc.Save("test.xml");

阅读:

XmlDocument xdoc = new XmlDocument();
...
xdoc.Load("test.xml");

答案 2 :(得分:0)

如果可以,请使用XDocument类而不是XmlDocument。它更容易使用。要编写然后读取XML,您可以这样做:

var fileName = @"foo.xml";

// Write XML
var xdoc = new XDocument(
    new XElement("users",
        new XElement("user",
            new XAttribute("name", "John Doe"),
            new XAttribute("age", "42")),
        new XElement("user",
            new XAttribute("name", "Jane Doe"),
            new XAttribute("age", "39"))));

xdoc.Save(fileName);

// Read XML
var xdoc2 = XDocument.Load(fileName);
foreach (var userxml in xdoc2.Root.Elements("user"))
{
    var name = userxml.Attribute("name");
    var age = userxml.Attribute("age");
    // use values as needed ...
}