Вторник, 30.04.2024
Королевство Delphi
Главное меню
Статьи
Наш опрос
Нравится раздел статьи?
Всего ответов: 68
Статистика
Онлайн всего: 2
Гостей: 2
Пользователей: 0
Форма входа
Главная » Статьи » Сеть-интернет » Робота с XML

Загрузка и анализ документа XML в Delphi

Обмен информацией в формате XML - это чрезвычайно удобный механизм, позволяющий свести к минимуму проблемы внутрифирменных форматов данных. Эти проблемы сводятся к сложностям при обмене информацией с контрагентами фирмы. Зачастую проблема стоит не только в невозможности других воспринимать предлагаемый вами формат (DBF, ASCII и т.п.), сколько в нежелании приспосабливаться к ним. Эти форматы не очень удобны. К тому же у вашего партнера наверняка уже есть наработки в этой области. Так почему бы вам не приспособится к его формату обмена данными?

Язык XML позволяет разрабатывать форматы описания данных, которые могут стать тем мостиком, котрый свяжет всех контрагентов и устранит технические и психологические барьеры, неизбежно возникающие при приспособлении к чужим технологиям.

Технология XML тоже не назовешь родной, однако ее возможности и универсальность при описании текстовых данных перекрывают все сложности, связанные с ее освоением.

Формировать документы в формате XML достаточно просто. Следует лишь познакомится с конкретным DTD и образцами корректных документов. А вот загрузка может быть достаточно трудна, если не прибегать к помощи готовых решений в виде XML парсеров. Их довольно много для разных платформ и при желании можно найти их описания в WWW. Одним из наиболее распространенным на платформе Windows является Microsoft XML Parser. Дело в том, что он входит в состав Microsoft Explorer 5.0 и более позние версии. Он доступен в виде объекта ActiveX. Данный парсер является верифицирующим, то есть проверяет не только синтаксическую проверку документа, но и семантическую корректность в соответствии с заданным DTD.

Для загрузки и анализа документа в Delphi рассмотрим следующий код.

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.


<!DOCTYPE ONIXMessage SYSTEM "onix-international.dtd">

<ONIXMessage release="1.1">

 <FromCompany>ТД Библио-Глобус</FromCompany>
 <FromPerson>Kirillov Alexey kirillov@biblio-globus.u</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

В итоге мы сформируем следующее дерево документа:

Получить ссылку на материал

Категория: Робота с XML | Добавил: Барон (14.12.2011)
Просмотров: 1496 | Теги: документ, XML, анализ, delphi | Рейтинг: 0.0/0
[ Пожертвования для сайта ] [ Пожаловаться на материал ]

Если вам помог материал сайта кликните по оплаченной рекламе размещенной в центре

Поиск
Категории раздела
Web-приложения [6]
Почта [12]
Работа с HTTP [4]
Робота с XML [4]
Сервер [3]
Разные [50]
Королевство Delphi © 2010-2024
Яндекс цитирования