将XML特定解析为数组

所以,如果我的XML看起来像这样….

  a   b   

什么是将其解析为名为’people’的C#数组的最佳/最简单的方法,其中people [0]是第一个人对象,然后如何格式化以及如何访问它?

谢谢!

您可以使用LINQ-To-Xml将此文件加载到数组中。

要在加载对象后简单地处理对象,您可以创建一个代表一个人的类:

 public class Person { public string Name { get; set; } } 

然后使用XElement.Load -method加载文件:

 var document = XElement.Load("persons.xml"); var persons = document.Elements("Person") .Select(p => new Person{ Name = p.Element("Name").Value } .ToArray(); 

你可以使用LinqToXml轻松完成

 var doc = XDocument.Parse(myXmlString); // .Load("filepath"); var persons = doc.Root .Elements("Person") .Select(x=> new Person {Name= x.Element("Name").Value}) .ToArray(); 

它将返回一个Person定义如下的数组。

 public class Person{ public string Name {get; set;} } 

我的C#很生疏,但这很简单,使用XML序列化

反序列化(读取),修改,然后序列化(写入):

 using System; using System.IO; using System.Xml.Serialization; namespace ConsoleApplication1 { [XmlRoot("people")] public class People { [XmlElement("person")] public Person[] person { get; set; } } [Serializable] public class Person { [XmlElement("name")] public string Name { get; set; } } class Program { public static void Main(string[] args) { People people = null; XmlSerializer serializer = new XmlSerializer(typeof(People)); using (StreamReader reader = new StreamReader("people.xml")) { people = (People)serializer.Deserialize(reader); } people.person[0].Name = "Dan"; using (StreamWriter writer = new StreamWriter("people.xml")) { serializer.Serialize(writer, people); } } } } 

假设:

 class Person { public string Name { get; set; } } 

然后(查询语法):

 var arr = (from p in XDocument.Load(path) // or .Parse(str) .Root .Elements("person") select new Person { Name = (string)p.Attribute("name") }).ToArray(); 

扩展方法语法中的相同内容:

 XDocument.Load(path) .Root .Elements("person") .Select(p => new new Person { Name = (string)p.Attribute("name") }) .ToArray(); 
 var doc = XDocument.Parse(input); string[] names = doc.Root.Descendants("name").Select(x => x.Value).ToArray(); 

如果输入xml格式与您提供的上述语句一样简单就足够了,否则添加此where子句不捕获xml文件中的其他name元素:

 string[] names = doc.Root.Descendants("name") .Where(x => x.Parent.Name == "person") .Select(x => x.Value).ToArray(); 

一条线就足够了。

 var people=XDocument.Load(path).Root.Elements().Select(y => y.Elements().ToDictionary(x => x.Name, x => x.Value)).ToArray(); 

您需要指定以下命名空间以进行测试

 using System.Xml.Linq; using System.Collections.Generic; using System.Collections; using System.Linq; 

测试代码

 var path=@"c:\people.xml"; var people=XDocument.Load(path).Root.Elements().Select(y => y.Elements().ToDictionary(x => x.Name, x => x.Value)).ToArray(); foreach(var person in people) { Console.WriteLine("name = {0}", person["name"]); Console.WriteLine("name = {0}", person["age"]); // requires person have a age defined in your xml file } 

用于测试的样本xml

   Humbert Humbert 36   Lolita 12