![]() |
| ||
|
|
Новости |
Поиск |
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>
Заранее благодарю!
АлеКо (2005-09-28 09:05:00) [21]На сколько я помню надо создать файл трансформации твоего XML с расширением XTR
<XmlTransformation Version="1.0">
Я это делал с помощью утилиты XML Mapper ( поставляется с Delphi 6)
Далее надо указать TXMLTransform и в нем файл трансформации.
Вот как у меня выглядит это дело в потоке:
CoInitialize(nil);
XMLTrans:=TXMLTransform.Create(nil);
DataSetXML:=TClientDataSet.Create(nil);
DataSetP:= TDataSetProvider.Create(nil);
XMLTrans.SourceXmlFile:=_XMLFile;
XMLTrans.TransformationFile:=_XTRFile;
DataSetP.DataSet:=DataSetXML;
try
DataSetXML.XMLData:=XMLTrans.Data;
except
ShowMessage('Ошибка получения данных');
end;
Synchronize(Update);
XMLTrans.Destroy;
DataSetXML.Destroy;
DataSetP.Destroy;
CoUnInitialize();
но мне не нравиться как это работает. Очень медленно.
XGarik (2005-09-28 08:44:00) [22]Я много чего уже испробовал: TXMLDocument, ClientDataSet и д.р. Ничего хорошего у меня из этого не вышло!
Впринципе, в свое время я писал даже класс для чтения xml-ки, используя чтение из файла, как текста и потом прозводил анализ.
Но сейчас я хочу сделать все правильно! Чтобы не просто работало для опред. ситуации, но чтобы для любой!
Помогите загрузить файл, скажем: 1.xml в ClientDataSet, дальше я сам разберусь!
У меня код:
procedure TForm1.Button1Click(Sender: TObject);
begin
clientdataset1.LoadFromFile('1.xml');
end;
Почему пишет ошибку: Mismatch in datapacket.
АлеКо (2005-09-28 04:39:00) [23]Для реализации DOM на вкладке Internet есть компонента TXMLDocument. Попробуй через него реализовать доступ к данным.(D6).
АлеКо (2005-09-28 03:45:00) [24]Вот может в эту сторону копать.
"Структура XML иерархична, и это фундаментальное положение необходимо принимать во внимание. Наиболее концептуальное представление иерархичной структуры известно как объектная модель документа (DOM). В этой модели документ XML рассматривается как набор узлов в древовидной структуре. Узлы могут быть элементами, атрибутами, текстом,
комментариями или инструкциями обработки."
С помощью DOM Вы можете обратиться к любому узлу документа.
XGarik (2005-09-27 15:08:00) [25]Вопрос не снят! Пожалуйста, помогите!
XGarik (2005-09-27 14:20:00) [26]Хорошо!
Тупой вопрос:
А, как тогда загрузить XML в ClientDataSet?
Desdechado (2005-09-27 13:40:00) [27]бегать надо по набору данных в ClientDataSet'е
или по парку :)
XGarik (2005-09-27 11:08:00) [28]Desdechado
А можно простенький примерчик обращения к полю XML? Или как пробежаться по xml-ке?
Desdechado (2005-09-27 11:02:00) [29]метод "влоб":
1. засасываешь XML в ClientDataSet
2. выгружаешь в DBF нужной тебе структуры, пробегаясь по записям