![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Kurt |
|
|||
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: нет Всего: 36 |
Подскажите, если кто знает:
мне нужно в Delphi сохранять/читать данные в XML-документ. Есть ли в Delphi что-нибудь для этого? Объект какой или компонент? А то, говорят, надо писать с помощью банальных FileRead/FileWrite... Долго и нудно.. ![]() Или есть какой-нибудь ActiveX? -------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Загрузка и анализ документа XML.
Обмен информацией в формате XML - это чрезвычайно удобный механизм, позволяющий свести к минимуму проблемы внутрифирменных форматов данных. Эти проблемы сводятся к сложностям при обмене информацией с контрагентами фирмы. Зачастую проблема стоит не только в невозможности других воспринимать предлагаемый вами формат (DBF, ASCII и т.п.), сколько в нежелании приспосабливаться к ним. Эти форматы не очень удобны. К тому же у вашего партнера наверняка уже есть наработки в этой области. Так почему бы вам не приспособится к его формату обмена данными? Язык XML позволяет разрабатывать форматы описания данных, которые могут стать тем мостиком, котрый свяжет всех контрагентов и устранит технические и психологические барьеры, неизбежно возникающие при приспособлении к чужим технологиям. Технология XML тоже не назовешь родной, однако ее возможности и универсальность при описании текстовых данных перекрывают все сложности, связанные с ее освоением. Формировать документы в формате XML достаточно просто. Следует лишь познакомится с конкретным DTD и образцами корректных документов. А вот загрузка может быть достаточно трудна, если не прибегать к помощи готовых решений в виде XML парсеров. Их довольно много для разных платформ и при желании можно найти их описания в WWW. Одним из наиболее распространенным на платформе Windows является Microsoft XML Parser. Дело в том, что он входит в состав Microsoft Explorer 5.0 и более позние версии. Он доступен в виде объекта ActiveX. Данный парсер является верифицирующим, то есть проверяет не только синтаксическую проверку документа, но и семантическую корректность в соответствии с заданным DTD. procedure LoadOnixDoc(const FileName: string); var XML: variant; Node, mainNode, childNodes: variant; i: integer; TreeNode: TTreeNode; procedure LoadItems(TreeNode: TTreeNode; Node: variant); var i: integer; begin TreeNode := TV.Items.AddChild(TreeNode, Node.nodeName); TreeNode.ImageIndex := TreeNode.Level; TreeNode.SelectedIndex := TreeNode.ImageIndex; if Node.nodeName = '#text' then begin TreeNode.Text := Node.nodeValue; TV.SetNodeBoldState(TreeNode, true); end; for i:=0 to Node.childNodes.length-1 do LoadItems(TreeNode, Node.childNodes.item[i]); end; begin XML := CreateOleObject('Microsoft.XMLDOM'); XML.load(FileName); if XML.parseError.reason <> '' then begin ShowMessage( XML.parseError.reason ); end else begin mainNode := XML.documentElement; childNodes := mainNode.childNodes; LoadItems(nil, mainNode); TreeNode := TV.Items[1]; while Assigned(TreeNode) do begin TreeNode.Expand(false); TreeNode := TreeNode.GetNextSibling; end; if Assigned(TV.Items[0]) then TV.Items[0].Expand(false); end; end; Пример документа XML Onix. <?xml version="1.0" encoding="windows-1251"?> <!DOCTYPE ONIXMessage SYSTEM "onix-international.dtd"> <ONIXMessage release="1.1"> <FromCompany>ТД Библио-Глобус</FromCompany> <FromPerson>Kirillov Alexey [email protected]</FromPerson> <ToCompany>EDItEUR</ToCompany> <ToPerson>EDItEUR chief manager</ToPerson> <MessageNumber>1</MessageNumber> <SentDate>23.12.00</SentDate> <DefaultLanguageOfText>rus</DefaultLanguageOfText> <Product> <RecordReference>247825</RecordReference> <NotificationType>3</NotificationType> <ISBN>966-7393-05-4</ISBN> <ProductForm>BB</ProductForm> <DistinctiveTitle>SQL энциклопедия пользователя</DistinctiveTitle> <Contributor> <ContributorSequenceNumber>0</ContributorSequenceNumber> <ContributorRole>A01</ContributorRole> <PersonName>Х. Ладани</PersonName> <PersonNameInverted>Ладани, Х.</PersonNameInverted> <BiographicalNote>Книга раскрывает темы, которые часто не описываются или достаточно кратко представлены в руководствах пользователя - подзапросы, структуры данных, представления, производительность, целостность и защита данных. </BiographicalNote> </Contributor> <NumberOfPages>624</NumberOfPages> <ImprintName>ДиаСофт</ImprintName> <MediaFile> <MediaFileTypeCode>04</MediaFileTypeCode> <MediaFileFormatCode>03</MediaFileFormatCode> <MediaFileLinkTypeCode>06</MediaFileLinkTypeCode> <MediaFileLink> http://shop.biblio-globus.ru/photos1/05/58983.jpg </MediaFileLink> </MediaFile> <SupplyDetail> <SupplierName></SupplierName> <AvailabilityCode></AvailabilityCode> <Price> <PriceTypeCode>01</PriceTypeCode> <PriceAmount>425</PriceAmount> <CurrencyCode>RUB</CurrencyCode> </Price> </SupplyDetail> </Product> </ONIXMessage> Для работы Вам понадобятся файлы DTD: ONIX INTERNATIONAL DTD В итоге мы сформируем следующее дерево документа: Демонстрационный пример с исходным текстом на Delphi вы можете скачать здесь. Дополнительные материалы по теме: <X+style> [http://www.bim.f2s.com/] - экспериментальный сайт на XML, где обработка ведется на Вашем компьютере (не на сервере) через XSL-стили, и почти все здесь, за редким исключением, не является HTML XML News [http://architag.com/XMLNews.html] - Новости XML XMLHack [http://www.xmlhack.com/] - A news site for XML developers. [http://www.w3.org/]- The World Wide Web Consortium (W3C) |
|||
|
||||
Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
TXMLDocument - компонент (оболочка над XML DOM)
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |