Код XMLDataSet = new DataSet();
XMLDataSet.ReadXml("Resources\\handbooks\\F008.xml", XmlReadMode.Fragment);
dataGridView1.DataSource = XMLDataSet;
dataGridView1.DataMember = XMLDataSet.Tables[0].TableName;
Схемы нет и создать ее не получается для корректной загрузки. Максимум что получилось — загрузить первую строку в DataTable и на этом всё...
Заранее благодарен
Здравствуйте, Rockerman, Вы писали:
R>Здравствуйте, подскажите пожалуйста, каким образом можно загрузить следующий xml документ в DataSet, не меняя формата файла?:
предварительно применить xsl-трансформацию, подгоняя фомат данных под нужный.
С точки зрения DataSet-сериализатора мы здесь видим три таблицы: item1, item2, item3.
Но если вдруг стот задача объединить их в одну таблицу (подумалось, глядя на одинаковые наборы атрибутов), то проще объединить таблицы после десериализации. Руками или с помощью Merge().
M>С точки зрения DataSet-сериализатора мы здесь видим три таблицы: item1, item2, item3. M>Но если вдруг стот задача объединить их в одну таблицу (подумалось, глядя на одинаковые наборы атрибутов), то проще объединить таблицы после десериализации. Руками или с помощью Merge().
В том то и дело, что таблица в результате должна быть одна. А эти item1, item2, и.т.д. распознаются как отдельные таблицы.. Руками править из кода не хотелось бы, поскольку таких файлов несколько десятков и они содержат различные справочники. Вообще мне нужно в готовую уже схему данных подключить эти справочники. Полагаю, что нужно корректно описать схему данных чтобы правильно грузились записи в нужную таблицу DataSet. Или есть другие эффективные решения?
Мне не понятно, почему нельзя было сделать по-нормальному xml файл(элементами или стандартными атрибутами), но это остается за кадром...
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>
И другие вариации на эту тему, но результата не было...
Здравствуйте, Rockerman, Вы писали:
R> Полагаю, что нужно корректно описать схему данных чтобы правильно грузились записи в нужную таблицу DataSet.
В данном случае невозможно.
R> Или есть другие эффективные решения?
Ну, как уже советовали, накатить XSLT шаблон, который заменит все "item*" на "item".
А еще эффективнее — тупым реплэйсом, если позволяет задача.
Здравствуйте, 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. Если работать в дизайнере запросов, то там видны только таблицы этой БД, а о созданных вручную таблицах дизайнер ничего не знает и не видет их...
Здравствуйте, 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'ом ?
Я просто искал способ загрузить данные XML в таблицу DataSet, но как оказалось — это бессмысленно в моем случае, поскольку я не смогу обращаться с SQL запросами в эту таблицу... По-крайней, мере из дизайнера набора данных в VS2008 я не нашел такую возможность. А XML файлы хотел использовать в качестве справочников для моей БД, чтобы не создавать в БД таблицы этих справочников непостредственно. Это тянет за собой реализацию вручную ипорта данных из XML в БД. Поскольку справочников XML несколько десятков, то искал решение поэффективнее...
Здравствуйте, Rockerman, Вы писали:
А>>Зачем ? А>>Что ты дальше делаеш с этим DataSet'ом ? R>Я просто искал способ загрузить данные XML в таблицу DataSet, но как оказалось — это бессмысленно в моем случае, поскольку я не смогу обращаться с SQL запросами в эту таблицу... По-крайней, мере из дизайнера набора данных в VS2008 я не нашел такую возможность. А XML файлы хотел использовать в качестве справочников для моей БД, чтобы не создавать в БД таблицы этих справочников непостредственно. Это тянет за собой реализацию вручную ипорта данных из XML в БД. Поскольку справочников XML несколько десятков, то искал решение поэффективнее...