解析XML并保存到对象中

时间:2009-10-08 13:35:32

标签: c#

我想解析XML文件并将此信息保存到对象中。做这个的最好方式是什么?请告诉我。

谢谢..

3 个答案:

答案 0 :(得分:8)

您可以使用XmlSerializer对其进行反序列化。

using System;
using System.IO;
using System.Xml.Serialization;

[XmlRoot("Root")]
public class MyType
{
    [XmlElement("Id")]
    public string Id { get; set; }
    [XmlElement("Name")]
    public string Name { get; set; }
}

static class Program
{
    static void Main()
    {
        string xml = @"<Root>
                          <Id>1</Id>
                          <Name>The Name</Name>
                      </Root>";
        MyType obj = (MyType) new XmlSerializer(typeof(MyType))
            .Deserialize(new StringReader(xml));
        Console.WriteLine(obj.Id);
        Console.WriteLine(obj.Name);
    }
};

答案 1 :(得分:5)

如果您使用的是.Net 3.5,我建议使用LINQ-To-XML。

一个简单的例子......

XML文件

 <?xml version="1.0" ?> 
 <People>
      <Person>
          <Name> ABC </Name>
          <SSN> 111111 </SSN>
          <Address> asdfg </Address>
      </Person>
 </People>

LINQ查询

XDocument doc = XDocument.Load(pathToFile);
var query = from d in doc.Root.Descendants("Person")
            select d;

foreach (var q in query)
{
    string name = q.Element("Name").Value;
    string ssn = q.Element("SSN").Value;
    string address = q.Element("Address").Value;
}

答案 2 :(得分:1)

  1. 获取架构(或xml文件)并使用 xsd.exe 生成一个类。生成的代码很难看,你可能需要手工清理它。
  2. 使用XmlSerializer反序列化为实例。
  3. 此方法优于其他方法的优点是您获得了一个强类型对象(以及IntelliSense处理您的对象)。除此之外,它意味着“节点查找”比其他解决方案(主要使用字典)更快。

    或者您可以尝试使用C#4.0的动态关键字,它可以让您选择避免生成代码并在运行时反序列化。虽然我不确定。这样你就失去了强大的输入,但保留了语法。