【问题标题】:Writing xml and reading it back c#编写xml并读回c#
【发布时间】:2017-06-10 20:25:03
【问题描述】:

好的,我现在使用文档方法而不是 XmlWriter 来编写我的 XML。 我已经编写了我的 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>

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

【问题讨论】:

  • 您的文件应该看起来很不一样,因为"Jane Doe" 不是编写它的代码中的属性。
  • 可以,但问题仍然有效,名称部分我无法掌握。
  • 4.5 它的名字我读不回来
  • 请显示您用于尝试获取名称的 C# 代码。并显示实际的 XML。向我们展示不同的 XML 是荒谬的;是属性还是 InnerText 中的名称?如果您自己不知道您的 XML 是什么或您想从中获得什么,难怪您什么都做不了。
  • 目前我正在使用节点读写但我缺少一个结束属性标签,我试图改变结尾但无济于事,它仍然可读和可写从这里去哪里我想我需要关闭属性标签,这是我编写的代码。

标签: c# xml xml-parsing


【解决方案1】:

逐个元素地编写 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>;
 }

微软在.Net documentation - Introducing XML Serialization中提供了一些很好的例子

【讨论】:

    【解决方案2】:

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

    为了节省:

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

    阅读:

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

    【讨论】:

      【解决方案3】:

      如果可以,请使用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 ...
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        相关资源
        最近更新 更多