Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование лекции.doc
Скачиваний:
49
Добавлен:
12.11.2019
Размер:
5.53 Mб
Скачать

34.1. Структура xml-документа

Простейший XML-документ имеет примерно следующий вид:

<?xml version="1.0"?>

<list_of_items>

<item id="1"><first/>Первый</item>

<item id="2">Второй <sub_item>подпункт 1</sub_item></item>

<item id="3">Третий</item>

<item id="4"><last/>Последний</item>

</list_of_items>

34.2. Использование xml в среде Delphi

Независимость представления информации в виде XML документов позволяет разным, участвующим в электронном бизнесе, фирмам производить независимое друг от друга ПО.

Один из наиболее эффективных вариантов реализации - использование существующего XML-парсера, поддерживающего DOM модель. Такой парсер является дистрибутивной поставкой Win`98 или составной частью IE 4,7 и выше (для Win`95) и представляет COM сервер, находящийся в библиотеке msxml.dll.

Модель компонентных объектов (COM) представляет инкапсулированные данные и методы в единую сущность и способ доступа к ним через систему интерфейсов. Средствами Delphi достаточно просто осуществить доступ к классам COM-объекта (в одном COM-сервере может быть включено несколько классов). Доступ к объектам осуществляется путем инициализации экземпляра класса через систему интерфейсов. Описание интерфейсов осуществляется языком определения интерфейсов (IDL), которое возможно осуществить средствами среды автоматически.

Средствами Delphi осуществляется импорт из COM-сервера msxml.dll, строится файлы описания интерфейса IDL и файл бинарного описания типов библиотеки - TLB. Данная операция осуществляется через системное меню: Project | Type Library Import. Далее появляется диалоговое окно, в котором необходимо выбрать COM-объект (в нашем случае объект зарегистрирован под именем "Microsoft.XMLDom (Version 2.0)" ) и создать TLB-файл (кнопка Create Unit). Используя TLB-файл, среда генерирует "паскалевский" файл описания COM-сервера - MSXML_TLB.pas

В файле MSXML_TLB.pas описаны все интерфейсы, константы и соклассы COM-сервера.

Для доступа к объектам COM-элемента, необходимо в директиве USES добавить имя файла описания библиотеки (MSXML_TLB.pas). Ниже представлена простейшая программа, использующая DOM стандартный анализатор msxml.dll, которая загружает XML-документ и отображает его в элементе текстового поля Memo1.

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

OleServer, MSXML_TLB, StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

Memo1: TMemo;

procedure Button1Click(Sender: TObject);

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

Procedure TForm1.Button1Click(Sender: Tobject);

// объявление сокласса объекта DOMDocument;

var coDoc : CoDOMDocument;

// класс, согласованный с интерфейсом IDOMDocument;

var Doc: IXMLDOMDocument;

begin

// создание экземпляра объекта DOMDocument;

Doc := coDoc.Create;

// вызов метода Load экземпляра объекта DOMDocument;

Doc.load('data.xml');

// доступ к свойстве xml экземпляра объекта DOMDocument;

Memo1.Text:=Doc.xml;

end;

end.

34.3. Концепция dom - объектная модель документа

Каждый XML документ представляется в виде набора множества объектов (классов), с помощью которых возможен доступ к отдельным элементам (полям объекта). DOM - интерфейс описывает доступ как к простым объектам типа DOMString или CharacterData, так и к частям или отдельным элементам XML документа: DOMFragmentElement, DOMNode, DOMElement.

Ниже приведены самые важные свойства и методы объектов XMLDOMDocument, XMLDOMNode, XMLDOMNodeList. Необходимо отметить, что представленные ниже методы и функции объектов DOM модели (Document Object Model) используются Microsoft XML-анализатором msxml.dll и несколько шире, чем утвержденная W3C Консорциумом DOM модель.

Объект XMLDOMDocument

Представляет верхний уровень объектной иерархии и содержит методы для работы с документом: его загрузки, анализа, создания в нем элементов, атрибутов, комментариев и т.д. .

Свойства

Async

Свойство, идентифицирующее текущий режим обработки

ParseError

Возвращает ссылку на объект обработки ошибки XMLDOMParseError

url

Возвращает URL документа

documentElement

Содержит ссылку на корневой элемент документа в виде объекта XMLDOMElement.

Методы

load(url) loadXML(xmlString)

Загружает XML документ,

save(objTarget)

Сохраняет XML документ в файле

abort

Прерывание процесса загрузки и обработки документа.

createAttribute (name)

Создает для текущего элемента новый атрибут с указанным именем.

createNode(Type, name, nameSpaceURI)

Создает узел указанного типа и названия

createElement(tagName)

Создает элемент документа с указанным названием.

createTextNode(data)

Создает текст внутри документа

getElementsByTagName(tagname)

Возвращает ссылку на коллекцию элементов документа с заданным именем

nodeFromID(idString)

Поиск элемента по идентификатору

Объект XMLDOMNode

Объект XMLDOMNode, реализующий базовый DOM интерфейс Node, предназначен для манипулирования с отдельным узлом дерева документа. Его свойства и методы позволяют получать и изменять полную информацию о текущем узле - его тип, название, полное название, его содержимое, список дочерних элементов и т.д.

Свойства

nodeName, baseName

Возвращает название текущего узла.

prefix

Возвращает Namespace префикс.

dataType

Определяет тип содержимого текущего узла

nodeType, nodeTypeString

Возвращает тип текущего узла:

attributes

Возвращает список атрибутов текущего узла в виде коллекции XMLDOMNamedNodeMap.

text

Возвращает содержимое текущего поддерева в виде текста

xml

Возвращает XML-представление текущего поддерева.

nodeValue

Возвращает содержимое текущего узла.

childNodes

Возвращает список дочерних элементов в виде XMLDOMNodeList.

firstChild, lastChild

Возвращает первый/последний дочерний элемент

previousSibling ,nextSibling

Возвращает предыдущий /следующий сестринский элемент.

parentNode

Содержит ссылку на родительский элемент.

ownerDocument

Возвращает указатель на документ, в котором находится текущий узел.

Методы

appendChild(newChild)

Добавляет текущему узлу новый дочерний элемент.

insertBefore(newChild, refChild)

Вставляет дочерний узел, располагая его в текущем поддереве "левее" узла, указанного параметром refChild.

cloneNode (deep)

Создание копии текущего элемента.

getAttribute(name) getAttributeNode (name) setAttribute(name, value) setAttributeNode(XMLDOMAttribute)

Доступ к атрибутам (создание, чтение, запись) объекта. Name - имя атрибута, value - его значение. Возращает значение объект XMLDOMAttribute.

replaceChild(newChild, oldChild) removeChild(oldChild)

Замена объекта oldChild текущего списка дочерних объектов на newChild. Удаление объекта oldChild

selectNodes(patternString) selectSingleNode(patternString)

Возвращает объект XMLDOMNodeList, выбранный по шаблону поиска или первый узел

transformNode(stylesheet) transformNodeToObject(stylesheet, outputObject)

Назначает стилевую таблицу для поддерева текущего узла и возвращает строку - результат обработки. В качестве параметра передается ссылка на объект DOMDocument, в котором находятся XSL инструкции.