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

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

Обращение к полю XML [D7]


Страницы:   1 2

XGarik ©   (2005-09-27 09:53:00) 

Доброго времени суток!

У меня запарка с преобразованием из XML (точнее одной его таблицы) в таблицу вида DBF! Можно ли сохранить таблицу XML-файла, как DBF-файл?

Конкретно:
Как обратиться ко всем полям таблицы records.
Например: records -> dobxod.

Структура XML следующая:

<?xml version="1.0" encoding="windows-1251" ?>
<ObxodDB>
 <xs:schema id="ObxodDB" xmlns="" xmlns:xs=" http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
   <xs:element name="ObxodDB" msdata:IsDataSet="true">
     <xs:complexType>
       <xs:choice maxOccurs="unbounded">
         <xs:element name="remark">
           <xs:complexType>
             <xs:sequence>
               <xs:element name="nremark" type="xs:int" minOccurs="0" />
               <xs:element name="cremarkrash" type="xs:string" minOccurs="0" />
             </xs:sequence>
           </xs:complexType>
         </xs:element>
         <xs:element name="records">
           <xs:complexType>
             <xs:sequence>
               <xs:element name="dobxod" type="xs:date" minOccurs="0" />
               <xs:element name="nmaror" type="xs:int" minOccurs="0" />
               <xs:element name="nnumbervv" type="xs:int" minOccurs="0" />
               <xs:element name="nvv" type="xs:int" minOccurs="0" />
               <xs:element name="cstatus" type="xs:string" minOccurs="0" />
             </xs:sequence>
           </xs:complexType>
         </xs:element>
       </xs:choice>
     </xs:complexType>
   </xs:element>
 </xs:schema>
</ObxodDB>


Заранее благодарю!


XGarik   (2005-09-30 11:58:00) [1]

Спасибо! Все скачал и буду пробовать!


dmitry501   (2005-09-30 05:31:00) [2]

Ну если все так плохо, то может быть стоило поискать в интернете универсальные XML парсеры? Например-
http://delphibase.spb.ru/?action=viewtopic&topic=strparse
http://www.destructor.de/xmlparser/download.htm
http://fundementals.sourceforge.net/cXMLParser.html
наверняка можно найти тот, который справится с Вашими XML файлами.


XGarik   (2005-09-29 21:02:00) [3]

Вопрос остается открытым, т.к. автору уже нечего терять. Все, что было можно я потерял! Мне дали еще пару дней на доведения программы до ума...
У меня просто ничего не выходит с чтением xml секций! Я перепробовал все! У кого есть примеры обработки подобных ситуаций - делитесь! Шлите на мыло или пишите!


XGarik   (2005-09-29 14:40:00) [4]

А вот теперь все нормально! СПАСИБО! Наверное, сервак отрубали для профилактики!


just_me   (2005-09-29 14:32:00) [5]

Да ну - перед постом перепроверил


XGarik   (2005-09-29 13:06:00) [6]


> Посмотри тут:
> http://www.agnisoft.com/soap/dotnetsoap.htm


Ссылка уже битая!


just_me   (2005-09-29 12:10:00) [7]

Посмотри тут:
http://www.agnisoft.com/soap/dotnetsoap.htm


XGarik   (2005-09-29 11:12:00) [8]

Может, какие бесплатные компоненты для этого есть! Если у вас есть что-нибудь, то пожалуйста вышлите на мыло!


XGarik   (2005-09-29 10:46:00) [9]

just_me
Хорошо, тогда как мне загрузить мой xml-файл в dataset?


just_me   (2005-09-29 10:40:00) [10]

> Я делал по аналогии с примером Microsoft
Ну так у тебя схема как раз и соответствует .NET DataSet, никакие ClientDataSet, ADODataSet не помогут. Зато DataSet - запросто


XGarik   (2005-09-29 08:47:00) [11]

Я делал по аналогии с примером Microsoft (Inventory.xml урезанный до 1-го поля):



 
 
   
   
     
     
       
       
       
       
       
       
       
       
       
       
       
     
     
   
   
     
     
       
       
       
       
       
       
       
       
       
       
       
       
       
       
     
     
   
   
     
     
       
       
       
       
       
     
     
   
   
     
     
       
       
       
       
       
       
       
       
       
       
     
     
   
   
 
 


 ANTON
 Antonio Moreno Taquería
 Antonio Moreno
 Owner
 Mataderos  2312
 México D.F.
 05023
 Mexico
 (5) 555-3932


 10302
 SUPRD
 4
 1996-09-10T00:00:00.0000000-07:00
 1996-10-08T00:00:00.0000000-07:00
 1996-10-09T00:00:00.0000000-07:00
 2
 6.27
 Suprêmes délices
 Boulevard Tirou, 255
 Charleroi
 B-6000
 Belgium


 10331
 54
 0.99
 15
 0


 8
 Northwoods Cranberry Sauce
 3
 2
 12 - 12 oz jars
 40
 6
 0
 0
 false


АлеКо   (2005-09-29 03:40:00) [12]

Я считаю что для правильной работы твоя схема должна выглядить так:

<?xml version="1.0" encoding="windows-1251" ?>
<xs:schema id="ObxodDB" xmlns="" xmlns:xs=" http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="ObxodDB" msdata:IsDataSet="true">
 <xs:complexType>
  <xs:choice maxOccurs="unbounded">
   <xs:element name="remark">
    <xs:complexType>
     <xs:sequence>
      <xs:element name="nremark" type="xs:int" minOccurs="0" />
      <xs:element name="cremarkrash" type="xs:string" minOccurs="0" />
     </xs:sequence>
    </xs:complexType>
   </xs:element>
   <xs:element name="records">
    <xs:complexType>
     <xs:sequence>
      <xs:element name="dobxod" type="xs:date" minOccurs="0" />
      <xs:element name="nmaror" type="xs:int" minOccurs="0" />
      <xs:element name="nnumbervv" type="xs:int" minOccurs="0" />
      <xs:element name="nvv" type="xs:int" minOccurs="0" />
      <xs:element name="cstatus" type="xs:string" minOccurs="0" />
     </xs:sequence>
    </xs:complexType>
   </xs:element>
  </xs:choice>
 </xs:complexType>
</xs:element>
</xs:schema>


а файл с данными так:

<?xml version="1.0" encoding="windows-1251" ?>
<ObxodDB>
<remark>
<nremark>1</nremark>
<cremarkrash>Примечание1</cremarkrash>
</remark>
<remark>
<nremark>2</nremark>
<cremarkrash>Примечание2</cremarkrash>
</remark>
<records>
<dobxod>2005-09-28</dobxod>
<nmaror>1</nmaror>
<nnumbervv>1</nnumbervv>
<nvv>1000</nvv>
<cstatus>Готово</cstatus>
</records>
<records>
<dobxod>2005-09-28</dobxod>
<nmaror>1</nmaror>
<nnumbervv>2</nnumbervv>
<nvv>2000</nvv>
<cstatus>Готово1</cstatus>
</records>
</ObxodDB>


у Вас все это зачем то объединено в один файл, мне кажется это не правильно.


XGarik   (2005-09-28 18:39:00) [13]

Ответ до сих пор не разгадан! Помогите! Сегодня буду сидеть всю ночь!


XGarik   (2005-09-28 12:52:00) [14]

Андрей ЖукК сожалению я не курю :D! Можно подробней! Просто я очень плохо знаю термины XML, а времени на их изучение не осталось!


Андрей Жук   (2005-09-28 11:34:00) [15]

курить SAX, DOM, XPath


Вольный Стрелок   (2005-09-28 11:03:00) [16]

Несмотря на одинаковость расширений файлов XML разные. Твой похоже, что dotnet-овский, а в нем допустимы вложенные датасеты...


XGarik   (2005-09-28 10:59:00) [17]

dmitry501
К сожалению действительно не подходит!
Пишет: Не удается создать набор записей из  указанного источника. Файл источника или поток должен содержать данные Recordset в формате XML или ADTG.

Как загрузить в ClientDataSet используя xrp-файл, созданный вручную мне рассказал товарищь АлеКо! Но программа тоже жестоко ругалась: Ошибка получения данных:  
XML Parse Error:
Reason: An invalid character was found in text content.
Error on line 1, position 1641.

Может я криво сформировал xrp-файл. Тогда, как его правильно сделать?

Повторяю задачу:
Есть xml с именем test.xml:
<?xml version="1.0" encoding="windows-1251" ?>
<ObxodDB>
<xs:schema id="ObxodDB" xmlns="" xmlns:xs=" http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
 <xs:element name="ObxodDB" msdata:IsDataSet="true">
  <xs:complexType>
   <xs:choice maxOccurs="unbounded">
    <xs:element name="remark">
     <xs:complexType>
      <xs:sequence>
       <xs:element name="nremark" type="xs:int" minOccurs="0" />
       <xs:element name="cremarkrash" type="xs:string" minOccurs="0" />
      </xs:sequence>
     </xs:complexType>
    </xs:element>
    <xs:element name="records">
     <xs:complexType>
      <xs:sequence>
       <xs:element name="dobxod" type="xs:date" minOccurs="0" />
       <xs:element name="nmaror" type="xs:int" minOccurs="0" />
       <xs:element name="nnumbervv" type="xs:int" minOccurs="0" />
       <xs:element name="nvv" type="xs:int" minOccurs="0" />
       <xs:element name="cstatus" type="xs:string" minOccurs="0" />
      </xs:sequence>
     </xs:complexType>
    </xs:element>
   </xs:choice>
  </xs:complexType>
 </xs:element>
</xs:schema>
<remark>
 <nremark>1</nremark>
 <cremarkrash>Примечание1</cremarkrash>
</remark>
<remark>
 <nremark>2</nremark>
 <cremarkrash>Примечание2</cremarkrash>
</remark>
<records>
 <dobxod>2005-09-28</dobxod>
 <nmaror>1</nmaror>
 <nnumbervv>1</nnumbervv>
 <nvv>1000</nvv>
 <cstatus>Готово</cstatus>
</records>
<records>
 <dobxod>2005-09-28</dobxod>
 <nmaror>1</nmaror>
 <nnumbervv>2</nnumbervv>
 <nvv>2000</nvv>
 <cstatus>Готово1</cstatus>
</records>
</ObxodDB>


Необходимо выкусить содержимое поля cstatus, 1 записи, таблицы records.
И вывести это в ShowMessage({обращение к полю}) и на экране загорается надпись "Готово".... Как это сделать?... Очень... очень срочно!!! Буду рад любым ответам! Знаю, что я сильно туплю, но эту задачу нужно решить уже до завтра!


dmitry501   (2005-09-28 10:14:00) [18]

Есть. Например-
function RecordsetFromXML(const XML: string): _Recordset;
var
 RS: Variant;
 Stream: TStringStream;
begin
 Result := nil;
 if XML = '' then
   Exit;
   Stream := TStringStream.Create(XML);
 try      
   Stream.Position := 0;
   RS := CreateOleObject('ADODB.Recordset');
   RS.Open(TStreamAdapter.Create(Stream) as IUnknown);
   Result := IUnknown(RS) as _Recordset;
 finally
   Stream.Free;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 RecordsetFromXML('test.xml');
end;


Но Ваши данные не в формате recordset ADO или ADTG :(


XGarik   (2005-09-28 10:00:00) [19]

Top, АлеКо
Руками нельзя, только программно! Неужели нет более гуманного способа сделать чтение из XML, кроме как загонять в xrp, через xml mapper?


Top   (2005-09-28 09:24:00) [20]

открой в excel свой xml и пересохрани в dbf


Страницы:   1 2

Наверх

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