![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обращение к полю XML [D7]
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