阅读xml的最佳方式

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

     

我想使用XmlReader来读取这个xml并返回一个学生List作为List 。 我知道这可以实现如下:

  List students = new List(); 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") }); } } 

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

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

绝对 – 使用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(); 

XmlReader是一个相对较低级别的类型 – 我会避免它,除非你真的无法承受一次将整个XML篡改到内存中。 即使这样,如果您只想要文档的子树,也可以将LINQ to XML与XmlReader结合使用。

如果我们使用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(); 
 List students = (from student in doc.Element("Students").Elements("student") select new Student { Name = student.Attribute("name"), Class = student.Attribute("class") } ).ToList(); 

请参阅下面的链接,

http://www.nearinfinity.com/blogs/joe_ferner/performance_linq_to_sql_vs.html

Silverlight支持XmlReaderhttp://msdn.microsoft.com/en-us/library/cc189001 ( XmlReader = vs.95 ) .aspx )

SQLDataReader这样的XmlReader基本上是一个非缓存模型,所以它们是面向性能的,但你只能用它来移动’Forward’。

你可以这样使用:

 protected void Page_Load(object sender, EventArgs e) { XmlTextReader reader = new XmlTextReader(Server.MapPath("~/XML")); while(reader.Read()) { switch(reader.NodeType) { case XmlNodeType.Element: var lbl = new Label(); lbl.Text=(reader.Name + " -> " ); break; case XmlNodeType.Text: Response.Write(reader.Value + "
"); break; case XmlNodeType.EndElement: Response.Write(""); break; } } }