Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Трансформация XML 
V
    Опции темы
m9yt
Дата 17.5.2013, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 27.2.2010

Репутация: нет
Всего: нет



Добрый день.
У меня есть XML - файл с некоторыми данными из программы. Так же есть 2 xslt файла, которые, как я понял, определяют, в каком формате этот XML будет отображаться. В первом xslt - описание самой таблицы, во втором - строк, находящихся в таблице.
Вопрос в том, можно ли каким - то образом все это поместить в dataGridView посредством dataSet или еще чего - либо?
Просто не силен в XML и вообще не уверен, правильно ли я объяснил имеющуюся проблему.

Это сообщение отредактировал(а) m9yt - 24.5.2013, 12:13
PM MAIL   Вверх
diadiavova
Дата 17.5.2013, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Датасет, равно как и дататэйбл умеют сохранять данные в хмл, а так же загружать их из хмл. Этим можно воспользоваться, только придется написать преобразование, которое твой хмл приведет в вид, понятный датесету или дататейблу. Формат там довольно простой, просто заполни табличку данными и вызови метод WriteXml, посмотри полученный документ, там все понятно. Дальше напиши xslt, который приведет хмл-данные в нужный вид. Это если надо иметь возможность настроить отображение. А так вообще поколдуй вот с этим
http://msdn.microsoft.com/query/dev11.quer...r-.NETFramework


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
m9yt
Дата 17.5.2013, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 27.2.2010

Репутация: нет
Всего: нет



Так у меня же уже есть готовые xslt - файлы...

Просто суть в том, что в этом XML находятся данные разных частей программы, и эти xslt, как я понял, вычленяют нужную мне в конкретном случае информацию для отображения в dataGridView.

Это сообщение отредактировал(а) m9yt - 17.5.2013, 12:21
PM MAIL   Вверх
diadiavova
Дата 17.5.2013, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Цитата(m9yt @  17.5.2013,  13:19 Найти цитируемый пост)
Так у меня же уже есть готовые xslt - файлы...

Если они делают именно то, о чем я написал, то просто у датасета вызови ReadXml, передай ему адрес результата преобразования и все должно загрузиться. Если эти файлы делают что-то другое, то узнай что именно smile 
Цитата(m9yt @  17.5.2013,  13:19 Найти цитируемый пост)
Просто суть в том, что в этом XML находятся данные разных частей программы, и эти xslt, как я понял, вычленяют нужную мне в конкретном случае информацию для отображения в dataGridView.

Возможно не вычленяют, а именно приводят к виду, понятному датасету. Попробуй загрузить.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
m9yt
Дата 17.5.2013, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 27.2.2010

Репутация: нет
Всего: нет



Цитата(diadiavova @ 17.5.2013,  12:27)
передай ему адрес результата преобразования и все должно загрузиться

Вот я и не пойму, как это преобразование вообще делается, используя XSLT - файлы.
PM MAIL   Вверх
diadiavova
Дата 17.5.2013, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Цитата(m9yt @  17.5.2013,  13:36 Найти цитируемый пост)
Вот я и не пойму, как это преобразование вообще делается, используя XSLT - файлы. 

Тебе надо его выполнить программно или можно с помощью студии?

Добавлено через 1 минуту и 46 секунд
Программно это  делается с помощью вот этого класса
http://msdn.microsoft.com/query/dev11.quer...r-.NETFramework


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
m9yt
Дата 17.5.2013, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 27.2.2010

Репутация: нет
Всего: нет



Пробую сделать так:

Код

 XslCompiledTransform xslt = new XslCompiledTransform();

xslt.Load("DescriptionTable.xslt"); 
xslt.Transform("1.xml", "2.xml"); // Появляется новый набор данных

xslt.Load("DescriptionRow.xslt");
xslt.Transform("1.xml", "3.xml"); // Появляется новый набор данных

dataSet1.ReadXml("2.xml"); // Пробую загрузить данные

dataGridView1.DataSource = dataSet1;
dataGridView1.DataMember = "Table1"; //В отладчике почему - то вижу у датасет1 таблицу Table1. Не знаю, почему такое название. Да
                                                                            // и в datGridView ничего не отображается


Это сообщение отредактировал(а) m9yt - 17.5.2013, 13:23
PM MAIL   Вверх
diadiavova
Дата 17.5.2013, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Цитата(m9yt @  17.5.2013,  14:22 Найти цитируемый пост)
и в datGridView ничего не отображается

Учитывая, что я не вижу результата преобразования, сказать что-то по этому поводу я вряд ли могу. Хотел выполнить преобразование, но поскольку хмл-файл неполный, ессно этого не сделаешь. Структура файла должна быть примерно такой: корневой элемент имеет имя датасета(вроде бы); в него вложены элементы, имеющие такое же имя, как у таблицы и каждый предствляет отдельную строку таблицы; ну и в элементах-строках размещаются элементы, имена которых совпадают с именами столбцов, это ячейки и их содержимое - значение каждой ячейки. Если структура файла другая - может ничего не получиться. Хотя можно попробовать поработать с классом, на который я дал ссылку в первом посте. Я помню со старым гридом(из первого фреймворка) он прекрасно работал и даже отображал документ в виде сворачивающихся блоков строк, с гридвюьем я этот класс не пользовал, так что не знаю что будет.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
m9yt
Дата 17.5.2013, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 27.2.2010

Репутация: нет
Всего: нет



В общем, после преобразования одним из файлов получил следующие xml-ки:

По таблицам:
Код




По строкам в таблицах:
Код




Теперь нужно организовать группировку строк в соответствующие таблицы, используя ID.
Каким образом можно наиболее просто решить данную задачу?

Это сообщение отредактировал(а) m9yt - 29.5.2013, 14:05
PM MAIL   Вверх
diadiavova
Дата 17.5.2013, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Цитата(m9yt @  17.5.2013,  14:50 Найти цитируемый пост)
Каким образом можно наиболее просто решить данную задачу? 

Наиболее просто было сразу выполнить преобразование таким образом, чтобы получить готовый результат. Можно, конечно, преобразовать и результат предыдущего преобразования, только смысла в этом нет.
Цитата(m9yt @  17.5.2013,  14:50 Найти цитируемый пост)
Теперь нужно организовать группировку строк в соответствующие таблицы, используя ID таблицы из 1 файла.

Группировку в xslt можно сделать как описано здесь
http://erum.ru/19.htm


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
m9yt
Дата 17.5.2013, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 27.2.2010

Репутация: нет
Всего: нет



А можно как - то без XSLT обойтись? Например, сохранить где - то все id таблиц, а потом в цикле каждый id сравнивать с id, указанным в описании строки, и  тем самым формировать структуру dataGridView?
PM MAIL   Вверх
diadiavova
Дата 17.5.2013, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Цитата(m9yt @  17.5.2013,  15:17 Найти цитируемый пост)
А можно как - то без XSLT обойтись? 

Да без проблем. Просто этот язык как раз для таких задач предназначен и очень удобен для преобразования хмл.
Цитата(m9yt @  17.5.2013,  15:17 Найти цитируемый пост)
Например, сохранить где - то все id таблиц, а потом в цикле каждый id сравнивать с id, указанным в описании строки, и  тем самым формировать структуру dataGridView? 

В принципе есть возможность реализовать часть программной логики на шарпе и использовать ее в хслт. Но если тебе это не подходит, то можно и полностью на шарпе. Если использовать последний вариант, то какие с этим проблемы? Что не понятно?
Вообще, у использования хслт в таких задачах есть еще одно важное преимущество: документ хслт можно менять, не затрагиваю программный код, а значит не только во время разработки, так что я бы рассмотрел этот вариант внимательнее.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0524 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.