Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

XML -> DataSet [XP]


Галинка ©   (2006-12-21 15:24:00) 

Есть XML-документ со схемой:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs=" http://www.w3.org/2001/XMLSchema">
 <xs:element name="Kanaele">
   <xs:complexType>
     <xs:sequence>
       <xs:element name="VibeKurve">
         <xs:complexType>
           <xs:sequence>
             <xs:element name="Eingaenge">
               <xs:complexType>
                 <xs:sequence>
                   <xs:element maxOccurs="unbounded" name="Kanal">
                     <xs:complexType>
                       <xs:sequence>
                         <xs:element name="ID" type="xs:unsignedByte" />
                         <xs:element name="Name" type="xs:string" />
                         <xs:element name="Einheit" type="xs:string" />
                       </xs:sequence>
                     </xs:complexType>
                   </xs:element>
                 </xs:sequence>
               </xs:complexType>
             </xs:element>
             <xs:element name="Ausgaenge" />
           </xs:sequence>
         </xs:complexType>
       </xs:element>
    </xs:complexType>
  </xs:element>
</xs:schema>
Как получить датасет с таблицами с названиями по тегам первого + второго уровня и с записыми по тегам третьего. Типа:
DataTable "VibeKurveEingaenge" (ID, Name, Einheit).


saxon   (2006-12-21 17:55:00) [1]

По крайней мере схему из [0] я считал. DataSet сказал что - 3 таблицы.


saxon   (2006-12-21 17:53:00) [2]

DataSet.ReadXmlSchema ?


Галинка   (2006-12-21 17:47:00) [3]

saxon   (21.12.06 17:36) [2]
делаю в  или... в си шарпе. Это просто кусок схемы, вся не влезла. это просто например.

у меня есть работоспособный вариант, но там в документ читаем хмл и потом в foreach делаем то, что нам собственно нада.

               dataSet1.Tables.Clear();
               XmlDocument curKanaele = new XmlDocument();
               curKanaele.Load(openFileDialog1.FileName);
               foreach (XmlNode curBaustein in curKanaele.DocumentElement.ChildNodes)
                   foreach (XmlNode curKanArt in curBaustein.ChildNodes)
                   {
                       string dtName = curBaustein.Name + curKanArt.Name;
                       DataTable curDT = new DataTable(dtName);
                       DataColumn cID = new DataColumn("ID", System.Type.GetType("System.Int32"));
                       curDT.Columns.Add(cID);
                       DataColumn cName = new DataColumn("Name", System.Type.GetType("System.String"));
                       curDT.Columns.Add(cName);
                       DataColumn cEinheit = new DataColumn("Einheit", System.Type.GetType("System.String"));
                       curDT.Columns.Add(cEinheit);
                       DataRow curDR;

                       foreach (XmlNode curKanal in curKanArt.ChildNodes)
                       {
                           object[] paramArray = new object[3];
                           paramArray[0] = Convert.ToInt32(curKanal.ChildNodes.Item(0).InnerText);
                           paramArray[1] = curKanal.ChildNodes.Item(1).InnerText;
                           paramArray[2] = curKanal.ChildNodes.Item(2).InnerText;

                           curDR = curDT.NewRow();
                           curDR.ItemArray = paramArray;
                           curDT.Rows.Add(curDR);
                       }
                       dataSet1.Tables.Add(curDT);
                   }


Но такой вариант не очень прельщает, хотелось бы понять как это все работает средствами DataSet'a.


saxon   (2006-12-21 17:36:00) [4]


> Галинка ©

У вас <xs:sequence> не закрыт.
В чем делаете? (Delphi or ?)


Megabyte   (2006-12-21 17:11:00) [5]

Копайся с утилитой XMLMapper и компонентами XMTransform и ClientDataSet.


Наверх

Титульная страница Поиск, карта сайта Написать письмо