Обмен информацией в формате XML

Советы » XML » Обмен информацией в формате XML

Обмен информацией в формате 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.

<?xml version="1.0" encoding="windows-1251"?>
<!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

Другое по теме:

Категории

Статьи

Советы

Copyright © 2022 - All Rights Reserved - www.delphirus.com