2009-06-02 3 views
0

У меня есть XML, как следующийКак создать коллекцию объектов из XML

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

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

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

+0

данных может быть больше, чем один колонка. Для простоты я дал всего 2 столбца. – Nair

ответ

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

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

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

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

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

0

Если данные считываются, вы считали, что используете Xslt для его форматирования в таблицу Html?

Вот article я нашел на StackOverflow, который покрывает это ...

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

Смежные вопросы