如何从xml创建对象集合

时间:2009-06-02 17:16:25

标签: .net xml collections data-collection

我有一个像以下

的xml
<DataCollection>
  <Data>
    <Name>John</Name>
    <Age>30</Age>
  </Data>
  ... more person
</DataCollection>

我想用Name,Age作为字段创建一个对象(或某种类型)集合。我遇到的一个问题是我不知道前面的结构(我所知道的是,将有DataCollection和Data)来创建一个类然后使用linq来使用select new。当前实现,我正在为每个数据执行XML,读取元素并创建逗号分隔列表。

有更好的方法吗? XML的目的是显示数据网格中Data下的所有数据。

3 个答案:

答案 0 :(得分:3)

FWIW这里是LINQ查询,它将把XML文档转换为对象集合:

    var coll = from XElement c in doc.Descendants("Data") 
       select new { 
           Name = c.Element("Name").Value, 
           Age = int.Parse(c.Element("Age").Value) 
       };

但我认为你真正想要的是一种直接将XML文档绑定到DataGrid的方法。一种方法是将DataGrid绑定到DataTable并使用其WriteXml / ReadXml方法读取/写入文件。

预览...我错过了传入XML结构未知的要求。您可以使用此LINQ构建对象集合的集合,而无需了解数据块的结构:

var coll = from XElement c in loaded.Descendants("Data")
       select (from XElement d in c.Elements() select d.Value);

或者您可以使用以下方法生成CSV:

string csv = string.Join(Environment.NewLine, 
( from XElement c in loaded.Descendants("Data") 
  select string.Join(",", 
    (from XElement d in c.Elements() select d.Value).ToArray())
).ToArray());

答案 1 :(得分:1)

我希望我明白你的问题...... 无论如何 - 假设您提到Linq后使用asp.net,词典是您的最佳选择。

您可以在此处找到有关他们的更多信息: http://msdn.microsoft.com/en-us/library/xfhwa508.aspx

通常,字典包含键/值对,因此您不必使用逗号,并且可以像您一样使用循环。

希望有所帮助!

答案 2 :(得分:0)

如果只读取数据,您是否考虑过使用Xslt将其格式化为Html表?

这是我在stackoverflow上找到的article,它涵盖了这个......

然后看起来子元素可能会改变他们想要的所有元素但它们仍然会渲染到你的网格(html表格)......