在x#中将xml数据解析为数组

如何使用C#将XML数据解析为数组?

从这个例子中,它看起来像你希望得到这个:

 var rows = XDocument.Load("filename.xml") .Root.Elements() .Select(row => row.Elements() .ToDictionary(v => v.Attribute("name").Value, v => v.Attribute("value").Value); 

这将创建一个IEnumerable> ,其中IEnumerable中的每个条目都是“行”,内部字典中的每个条目都是“变量”。


如果您希望创建一个更强类型的解决方案,并且可以保证XML结构总是两个变量,一个名为budgetYear ,一个名为account ,那么这样的东西就可以工作:

 // Probably needs a better name. struct YearAndAccount { private readonly int budgetYear; private readonly string accountId; public int BudgetYear { get { return this.budgetYear; } } public string AccountId { get { return this.accountId; } } public YearAndAccount(int budgetYear, string accountId) { this.budgetYear = budgetYear; this.accountId = accountId; } } var rows = XDocument.Load("filename.xml") .Root.Elements() .Select(row => new YearAndAccount( int.Parse(row.Elements().Single(el => el.Attribute("name").Value == "budgetYear") .Attribute("value").Value), row.Elements().Single(el => el.Attribute("name").Value == "account") .Attribute("value").Value)); 

这将创建一个IEnumerable


强类型解决方案的解析代码非常糟糕,因为您的XML结构非常糟糕; 一个更好的结构就像是

 
2008 10202 2007 11202

在这种情况下,代码就是这样

 var rows = XDocument.Load("filename.xml") .Root.Elements() .Select(row => new YearAndAccount(row.Element("budgetYear").Value, int.Parse(row.Element("account").Value))); 

.Net中的Xml序列化/反序列化可以通过以下方式实现:

  1. System.Xml.Serialization命名空间中的XmlSerializer和Xml *属性
  2. DataContactSerializer和DataContract + DataMember属性
  3. XmlReader和XmlWriter + Linq – 处理原始xml文件。

您想要实现的目标称为反序列化 – 有很多方法可以实现它。

在.NET框架中,可以很好地控制如何实现这一目标的新类之一是DataContractSerializer 。 您可以在链接文档底部的示例中看到它的工作原理示例。

没有具体的例子,这是我可以帮助的。