Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Обмен информацией в формате 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

Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay