阅读xml的最佳方式

Chi*_*joo 17 c# xml silverlight silverlight-4.0

我有一个像这样的xml文档:

<Students>
<student name="A" class="1"/>
<student name="B"class="2"/>
<student name="c" class="3"/>
</Students>
Run Code Online (Sandbox Code Playgroud)

我想用来XmlReader阅读这个xml并返回一个学生列表List<student>.我知道这可以实现如下:

 List<Student> students = new List<Student>();
    XmlReader reader = XmlReader.Create("AppManifest.xml");
    while (reader.Read())
    {
       if (reader.NodeType == XmlNodeType.Element && reader.Name == "student")
       {
            students.Add(new Student()
            {
                 Name = reader.GetAttribute("name"),
                 Class = reader.GetAttribute("Class")
             });
        }
     }
Run Code Online (Sandbox Code Playgroud)

我只想知道是否有更好的解决方案?

我正在使用silverlight 4.xml结构是静态的,即.它将只有一个Students节点,所有具有上述属性的学生节点将只在那里.

Jon*_*eet 48

绝对 - 使用LINQ to XML.它是如此简单得多:

XDocument doc = XDocument.Load("AppManifest.xml");
var students = doc.Root
                  .Elements("student")
                  .Select(x => new Student {
                              Name = (string) x.Attribute("name"),
                              Class = (string) x.Attribute("class")
                          })
                  .ToList();
Run Code Online (Sandbox Code Playgroud)

XmlReader是一个相对低级的类型 - 我会避免它,除非你真的无法承受一次将整个XML写入内存.即使这样,XmlReader如果您只想要文档的子树,也可以使用LINQ to XML .

  • @Chinjoo:XDocument 不是 XMLDocument。是的,确实如此:http://msdn.microsoft.com/en-us/library/system.xml.linq.xdocument(v=VS.95).aspx (2认同)

Tor*_*son 8

如果我们使用Linq xml,它会更容易:

var xDoc = XDocument.Load("AppManifest.xml");

var students = 
    xDoc.Root.Elements("student")
    .Select(n =>
        new Student
        {
            Name = (string)n.Attribute("name"),
            Class = (string)n.Attribute("class"),
        })
    .ToList();
Run Code Online (Sandbox Code Playgroud)