0

我有一个如下的 xml

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

我想创建一个以名称、年龄为字段的对象(或某种类型)集合。我遇到的一个问题是我事先不知道结构(我所知道的是,会有 DataCollection 和 Data)来创建一个类,然后使用 linq 来使用 select new。当前的实现,我正在遍历每个数据的 XML,读取元素并创建一个逗号分隔的列表。

有一个更好的方法吗?XML 的目的是在数据网格中显示在数据下传入的所有数据。

4

3 回答 3

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());
于 2009-06-02T18:58:15.607 回答
1

我希望我能理解你的问题......无论如何 - 假设你使用 asp.net,因为你提到了 Linq,字典是你的最佳选择。

你可以在这里找到更多关于它们的信息:http://msdn.microsoft.com/en-us/library/xfhwa508.aspx

通常,字典包含键/值对,因此您不必使用逗号并且能够像您应该使用的那样使用循环。

希望有帮助!

于 2009-06-02T17:41:28.860 回答
0

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

这是我在stackoverflow上找到的一篇文章,涵盖了这个......

然后似乎子元素可以更改他们想要的所有内容,但它们仍然会呈现到您的网格(html表)......

于 2009-06-02T18:36:27.943 回答