загрузка xml файла
От: Rockerman  
Дата: 06.09.11 07:58
Оценка:
Здравствуйте, подскажите пожалуйста, каким образом можно загрузить следующий xml документ в DataSet, не меняя формата файла?:

<?xml version="1.0" encoding="windows-1251" ?> <root><item1 DATEBEG="01.01.2011" DATEEND="" DOCNAME="blbla1" IDDOC="1"/><item2 DATEBEG="01.01.2011" DATEEND="" DOCNAME="blbla2" IDDOC="2"/><item3 DATEBEG="01.01.2011" DATEEND="" DOCNAME="blabla3" IDDOC="3"/></root>

Код XMLDataSet = new DataSet();
XMLDataSet.ReadXml("Resources\\handbooks\\F008.xml", XmlReadMode.Fragment);
dataGridView1.DataSource = XMLDataSet;
dataGridView1.DataMember = XMLDataSet.Tables[0].TableName;

Схемы нет и создать ее не получается для корректной загрузки. Максимум что получилось — загрузить первую строку в DataTable и на этом всё...
Заранее благодарен
Re: загрузка xml файла
От: Neco  
Дата: 06.09.11 08:07
Оценка:
Здравствуйте, Rockerman, Вы писали:

R>Здравствуйте, подскажите пожалуйста, каким образом можно загрузить следующий xml документ в DataSet, не меняя формата файла?:

предварительно применить xsl-трансформацию, подгоняя фомат данных под нужный.
всю ночь не ем, весь день не сплю — устаю
Re: загрузка xml файла
От: Mihas  
Дата: 06.09.11 08:21
Оценка:
Здравствуйте, Rockerman, Вы писали:

Вот такой нехитрый код затолкал твою xml-ку в датасет.
  var ds = new DataSet("MyDataSet");
  ds.ReadXml(@"D:\Temp\XMLFile1.xml");

А в чем проблема-то была?

Добавлю на всяки случай.

<?xml version="1.0" encoding="windows-1251" ?>
<root>
  <item1 DATEBEG="01.01.2011" DATEEND="" DOCNAME="blbla1" IDDOC="1"/>
  <item2 DATEBEG="01.01.2011" DATEEND="" DOCNAME="blbla2" IDDOC="2"/>
  <item3 DATEBEG="01.01.2011" DATEEND="" DOCNAME="blabla3" IDDOC="3"/>
</root>


С точки зрения DataSet-сериализатора мы здесь видим три таблицы: item1, item2, item3.
Но если вдруг стот задача объединить их в одну таблицу (подумалось, глядя на одинаковые наборы атрибутов), то проще объединить таблицы после десериализации. Руками или с помощью Merge().
Re[2]: загрузка xml файла
От: Rockerman  
Дата: 06.09.11 09:12
Оценка:
Здравствуйте, Mihas, Вы писали:

M>Здравствуйте, Rockerman, Вы писали:


M>Вот такой нехитрый код затолкал твою xml-ку в датасет.

M>
M>  var ds = new DataSet("MyDataSet");
M>  ds.ReadXml(@"D:\Temp\XMLFile1.xml");
M>

M>А в чем проблема-то была?

M>Добавлю на всяки случай.


M>
M><?xml version="1.0" encoding="windows-1251" ?>
M><root>
M>  <item1 DATEBEG="01.01.2011" DATEEND="" DOCNAME="blbla1" IDDOC="1"/>
M>  <item2 DATEBEG="01.01.2011" DATEEND="" DOCNAME="blbla2" IDDOC="2"/>
M>  <item3 DATEBEG="01.01.2011" DATEEND="" DOCNAME="blabla3" IDDOC="3"/>
M></root>
M>


M>С точки зрения DataSet-сериализатора мы здесь видим три таблицы: item1, item2, item3.

M>Но если вдруг стот задача объединить их в одну таблицу (подумалось, глядя на одинаковые наборы атрибутов), то проще объединить таблицы после десериализации. Руками или с помощью Merge().
В том то и дело, что таблица в результате должна быть одна. А эти item1, item2, и.т.д. распознаются как отдельные таблицы.. Руками править из кода не хотелось бы, поскольку таких файлов несколько десятков и они содержат различные справочники. Вообще мне нужно в готовую уже схему данных подключить эти справочники. Полагаю, что нужно корректно описать схему данных чтобы правильно грузились записи в нужную таблицу DataSet. Или есть другие эффективные решения?
Мне не понятно, почему нельзя было сделать по-нормальному xml файл(элементами или стандартными атрибутами), но это остается за кадром...
Re[3]: загрузка xml файла
От: Rockerman  
Дата: 06.09.11 09:27
Оценка:
Mihas, спасибо, использовал так:
XMLDataSet = new DataSet();
XMLDataSet.ReadXml("Resources\\handbooks\\F008.xml", XmlReadMode.Auto);
DataTable dataTable = new DataTable();
foreach(DataTable dt in XMLDataSet.Tables){
dataTable.Merge(dt);
}
dataGridView1.DataSource = dataTable;
Данные действительно объединились А как вручную добавлять или что имелось в виду?
Еще интересует вопрос-таки по схеме, т.е. как примерно будет выглядеть.
Пробовал
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="Klinic">
<xs:attributeGroup name ="ItemAttributes">
<xs:attribute name="DATEBEG" type="xs:date"/>
<xs:attribute name="DATEEND" type="xs:date"/>
<xs:attribute name="DOCNAME" type="xs:string"/>
<xs:attribute name="DOCID" type="xs:int"/>
</xs:attributeGroup>
<xs:complexType name="root">
<xs:attributeGroup ref="ItemAttributes"/>
</xs:complexType>
</xs:schema>
И другие вариации на эту тему, но результата не было...
Re[3]: загрузка xml файла
От: Mihas  
Дата: 06.09.11 10:06
Оценка: 1 (1)
Здравствуйте, Rockerman, Вы писали:

R> Полагаю, что нужно корректно описать схему данных чтобы правильно грузились записи в нужную таблицу DataSet.

В данном случае невозможно.

R> Или есть другие эффективные решения?

Ну, как уже советовали, накатить XSLT шаблон, который заменит все "item*" на "item".
А еще эффективнее — тупым реплэйсом, если позволяет задача.
Re[4]: загрузка xml файла
От: Rockerman  
Дата: 07.09.11 02:40
Оценка:
Здравствуйте, Mihas, Вы писали:

M>Здравствуйте, Rockerman, Вы писали:


R>> Полагаю, что нужно корректно описать схему данных чтобы правильно грузились записи в нужную таблицу DataSet.

M>В данном случае невозможно.

R>> Или есть другие эффективные решения?

M>Ну, как уже советовали, накатить XSLT шаблон, который заменит все "item*" на "item".
M>А еще эффективнее — тупым реплэйсом, если позволяет задача.

А каким образом можно связать таблицу XML с таблицей из другого источника данных?
Ну допустим, я загрузил XML в DataSet, который построен по базе Access.
Как можно использовать таблицу XML в запросах (DataAdapter) типа:
"Select * FROM table_mdb, table_xml WHERE table_mdb.ID = table_xml.ID". Запросы же отправляются через OleDBConnection (в моем случае), а он нацелен на MDB базу и ничего не знает о таблице XML даже если она присутствует в DataSet. Если работать в дизайнере запросов, то там видны только таблицы этой БД, а о созданных вручную таблицах дизайнер ничего не знает и не видет их...
Re[5]: загрузка xml файла
От: Mihas  
Дата: 07.09.11 04:29
Оценка:
Здравствуйте, Rockerman, Вы писали:

R>А каким образом можно связать таблицу XML с таблицей из другого источника данных?

Всё-таки, разберись немного с терминологией. Нет таблицы XML. Есть датасет, в котором лежит копия данных из твоего XML.

R>Ну допустим, я загрузил XML в DataSet, который построен по базе Access.

R>Как можно использовать таблицу XML в запросах (DataAdapter) типа:
R>"Select * FROM table_mdb, table_xml WHERE table_mdb.ID = table_xml.ID". Запросы же отправляются через OleDBConnection (в моем случае), а он нацелен на MDB базу и ничего не знает о таблице XML даже если она присутствует в DataSet. Если работать в дизайнере запросов, то там видны только таблицы этой БД, а о созданных вручную таблицах дизайнер ничего не знает и не видет их...
В свое время я не нашел такой возможности. Но, может быть, плохо искал и тут кто-нибудь подскажет.
Видел лишь платную библиотеку, которая позволяет обращаться к датасету SQL-запросами. Называется вроде Query DataSet.
Re: загрузка xml файла
От: Аноним  
Дата: 07.09.11 09:31
Оценка:
Здравствуйте, Rockerman, Вы писали:

R>Здравствуйте, подскажите пожалуйста, каким образом можно загрузить следующий xml документ в DataSet, не меняя формата файла?:


R><?xml version="1.0" encoding="windows-1251" ?> <root><item1 DATEBEG="01.01.2011" DATEEND="" DOCNAME="blbla1" IDDOC="1"/><item2 DATEBEG="01.01.2011" DATEEND="" DOCNAME="blbla2" IDDOC="2"/><item3 DATEBEG="01.01.2011" DATEEND="" DOCNAME="blabla3" IDDOC="3"/></root>


R>Код XMLDataSet = new DataSet();

R> XMLDataSet.ReadXml("Resources\\handbooks\\F008.xml", XmlReadMode.Fragment);
R> dataGridView1.DataSource = XMLDataSet;
R> dataGridView1.DataMember = XMLDataSet.Tables[0].TableName;

R>Схемы нет и создать ее не получается для корректной загрузки. Максимум что получилось — загрузить первую строку в DataTable и на этом всё...

R>Заранее благодарен


Зачем ?
Что ты дальше делаеш с этим DataSet'ом ?
Re[2]: загрузка xml файла
От: Rockerman  
Дата: 07.09.11 14:00
Оценка:
А>Зачем ?
А>Что ты дальше делаеш с этим DataSet'ом ?
Я просто искал способ загрузить данные XML в таблицу DataSet, но как оказалось — это бессмысленно в моем случае, поскольку я не смогу обращаться с SQL запросами в эту таблицу... По-крайней, мере из дизайнера набора данных в VS2008 я не нашел такую возможность. А XML файлы хотел использовать в качестве справочников для моей БД, чтобы не создавать в БД таблицы этих справочников непостредственно. Это тянет за собой реализацию вручную ипорта данных из XML в БД. Поскольку справочников XML несколько десятков, то искал решение поэффективнее...
Re[3]: загрузка xml файла
От: QrystaL Украина  
Дата: 07.09.11 17:15
Оценка:
Здравствуйте, Rockerman, Вы писали:

А>>Зачем ?

А>>Что ты дальше делаеш с этим DataSet'ом ?
R>Я просто искал способ загрузить данные XML в таблицу DataSet, но как оказалось — это бессмысленно в моем случае, поскольку я не смогу обращаться с SQL запросами в эту таблицу... По-крайней, мере из дизайнера набора данных в VS2008 я не нашел такую возможность. А XML файлы хотел использовать в качестве справочников для моей БД, чтобы не создавать в БД таблицы этих справочников непостредственно. Это тянет за собой реализацию вручную ипорта данных из XML в БД. Поскольку справочников XML несколько десятков, то искал решение поэффективнее...

LINQ to XML?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.