| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > Трансформация XML |
| Автор: m9yt 17.5.2013, 11:56 |
| Добрый день. У меня есть XML - файл с некоторыми данными из программы. Так же есть 2 xslt файла, которые, как я понял, определяют, в каком формате этот XML будет отображаться. В первом xslt - описание самой таблицы, во втором - строк, находящихся в таблице. Вопрос в том, можно ли каким - то образом все это поместить в dataGridView посредством dataSet или еще чего - либо? Просто не силен в XML и вообще не уверен, правильно ли я объяснил имеющуюся проблему. |
| Автор: diadiavova 17.5.2013, 12:11 |
| Датасет, равно как и дататэйбл умеют сохранять данные в хмл, а так же загружать их из хмл. Этим можно воспользоваться, только придется написать преобразование, которое твой хмл приведет в вид, понятный датесету или дататейблу. Формат там довольно простой, просто заполни табличку данными и вызови метод WriteXml, посмотри полученный документ, там все понятно. Дальше напиши xslt, который приведет хмл-данные в нужный вид. Это если надо иметь возможность настроить отображение. А так вообще поколдуй вот с этим http://msdn.microsoft.com/query/dev11.query?appId=Dev11IDEF1&l=RU-RU&k=k%28System.Xml.XmlDataDocument%29;k%28vs.objectbrowser%29;k%28TargetFrameworkMoniker-.NETFramework |
| Автор: m9yt 17.5.2013, 12:19 |
| Так у меня же уже есть готовые xslt - файлы... Просто суть в том, что в этом XML находятся данные разных частей программы, и эти xslt, как я понял, вычленяют нужную мне в конкретном случае информацию для отображения в dataGridView. |
| Автор: m9yt 17.5.2013, 12:36 | ||
Вот я и не пойму, как это преобразование вообще делается, используя XSLT - файлы. |
| Автор: diadiavova 17.5.2013, 12:38 | ||
Тебе надо его выполнить программно или можно с помощью студии? Добавлено через 1 минуту и 46 секунд Программно это делается с помощью вот этого класса http://msdn.microsoft.com/query/dev11.query?appId=Dev11IDEF1&l=RU-RU&k=k%28System.Xml.Xsl.XslCompiledTransform%29;k%28vs.objectbrowser%29;k%28TargetFrameworkMoniker-.NETFramework |
| Автор: m9yt 17.5.2013, 13:22 | ||
Пробую сделать так:
|
| Автор: diadiavova 17.5.2013, 13:37 |
Учитывая, что я не вижу результата преобразования, сказать что-то по этому поводу я вряд ли могу. Хотел выполнить преобразование, но поскольку хмл-файл неполный, ессно этого не сделаешь. Структура файла должна быть примерно такой: корневой элемент имеет имя датасета(вроде бы); в него вложены элементы, имеющие такое же имя, как у таблицы и каждый предствляет отдельную строку таблицы; ну и в элементах-строках размещаются элементы, имена которых совпадают с именами столбцов, это ячейки и их содержимое - значение каждой ячейки. Если структура файла другая - может ничего не получиться. Хотя можно попробовать поработать с классом, на который я дал ссылку в первом посте. Я помню со старым гридом(из первого фреймворка) он прекрасно работал и даже отображал документ в виде сворачивающихся блоков строк, с гридвюьем я этот класс не пользовал, так что не знаю что будет. |
| Автор: m9yt 17.5.2013, 13:50 | ||||
| В общем, после преобразования одним из файлов получил следующие xml-ки: По таблицам:
По строкам в таблицах:
Теперь нужно организовать группировку строк в соответствующие таблицы, используя ID. Каким образом можно наиболее просто решить данную задачу? |
| Автор: diadiavova 17.5.2013, 14:08 | ||
Наиболее просто было сразу выполнить преобразование таким образом, чтобы получить готовый результат. Можно, конечно, преобразовать и результат предыдущего преобразования, только смысла в этом нет.
Группировку в xslt можно сделать как описано здесь http://erum.ru/19.htm |
| Автор: m9yt 17.5.2013, 14:17 |
| А можно как - то без XSLT обойтись? Например, сохранить где - то все id таблиц, а потом в цикле каждый id сравнивать с id, указанным в описании строки, и тем самым формировать структуру dataGridView? |
| Автор: diadiavova 17.5.2013, 14:38 | ||
Да без проблем. Просто этот язык как раз для таких задач предназначен и очень удобен для преобразования хмл.
В принципе есть возможность реализовать часть программной логики на шарпе и использовать ее в хслт. Но если тебе это не подходит, то можно и полностью на шарпе. Если использовать последний вариант, то какие с этим проблемы? Что не понятно? Вообще, у использования хслт в таких задачах есть еще одно важное преимущество: документ хслт можно менять, не затрагиваю программный код, а значит не только во время разработки, так что я бы рассмотрел этот вариант внимательнее. |