XML из DataTable с использованием Linq - PullRequest
0 голосов
/ 26 августа 2010

Этот код

XmlDataDocument xmlDataDocument = new XmlDataDocument(ds);

не работает для меня, поскольку имена узлов получены из закодированного свойства столбцов ColumnName и будут выглядеть, например, как «last_x20_name».Это я не могу использовать в итоговой таблице Excel.Чтобы обработать имена столбцов, чтобы сделать их более дружественными, мне нужно сгенерировать сам XML.

Мне нравится LINQ to XML, и один из ответов на этот вопрос содержалследующие фрагменты:

XDocument doc = new XDocument(new XDeclaration("1.0","UTF-8","yes"), 
new XElement("products", from p in collection 
 select new XElement("product", 
     new XAttribute("guid", p.ProductId),  
     new XAttribute("title", p.Title), 
     new XAttribute("version", p.Version)))); 

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

Ответы [ 2 ]

2 голосов
/ 26 августа 2010

Это должно быть возможно.

Чтобы использовать ваш набор данных в качестве источника, вам нужно Linq-to-Dataset .

Тогда вам понадобится вложенный запрос

// untested
var data = new XElement("products", 
   from row in ds.Table["ProductsTable"].Rows.AsEnumerable()
   select new XElement("product", 
     from column in ds.Table["ProductsTable"].Columns  // not sure about this
     select new XElement(colum.Fieldname, rows[colum.Fieldname]) 
   ) );
1 голос
/ 27 августа 2010

Я ценю ответы, но мне пришлось вообще отказаться от этого подхода. Мне удалось создать нужный XML (хотя и не с Linq), но, конечно, есть причина, по которой реализация по умолчанию конструктора XmlDataDocument использует EncodedColumnName , а именно: специальные символы не допускаются в имена элементов в XML. Но так как я хотел использовать XML для преобразования того, что раньше было простым CSV-файлом, в формат электронной таблицы XML с использованием XSLT (клиент жалуется на потерю первых 0 в почтовых кодах и т. Д. При загрузке исходного CSV в Excel), мне пришлось посмотреть на способы сохранения данных в Excel.

Но конечная цель этого состоит в том, чтобы создать файл CSV для загрузки в процессор расчета заработной платы, и они предписывают именам столбцов что-то, что не соответствует XML (например, «Файл №»). Данные проверяются людьми перед загрузкой, и они используют Excel.

Я все-таки прибегнул к жесткому кодированию имен столбцов в XSLT.

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