Как создать коллекцию объектов из XML - PullRequest
0 голосов
/ 02 июня 2009

У меня есть xml вроде следующего

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

Я хочу создать коллекцию объектов (или некоторых типов) с полями Name, Age. Одна из проблем, с которой я столкнулся, заключается в том, что я не знаю структуру заранее (все, что я знаю, это будет DataCollection и Data) для создания класса, а затем с помощью linq для использования select new. В текущей реализации я изучаю XML для каждого Data, читаю элементы и создаю список, разделенный запятыми.

Есть ли лучший способ сделать это? Цель XML - отобразить все данные, поступающие в разделе «Данные» в сетке данных.

Ответы [ 3 ]

3 голосов
/ 02 июня 2009

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 голос
/ 02 июня 2009

Надеюсь, я понимаю ваш вопрос ... в любом случае - если вы используете asp.net, так как упомянули Linq, словари - ваш лучший выбор.

Вы можете найти больше о них здесь: http://msdn.microsoft.com/en-us/library/xfhwa508.aspx

В общем, словарь содержит пары ключ / значение, поэтому вам не нужно использовать запятые и иметь возможность использовать циклы, как следует.

Надеюсь, это поможет!

0 голосов
/ 02 июня 2009

Если данные предназначены только для чтения, рассматривали ли вы возможность использования Xslt для форматирования их в HTML-таблицу?

Вот статья , которую я нашел в stackoverflow, которая охватывает это ...

Тогда кажется, что дочерние элементы могут изменить все, что они хотят, но они все равно будут отображаться в вашей сетке (таблица html) ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...