Функции dom xml


Содержание

Работа с DOM-моделью

Каждый объект Window имеет свойство document, ссылающееся на объект Document. Этот объект Document не является автономным объектом. Он является центральным объектом обширного API, известного как объектная модель документа (DOM), который определяет порядок доступа к содержимому документа.

Обзор модели DOM

— это фундаментальный прикладной программный интерфейс, обеспечивающий возможность работы с содержимым HTML и XML-документов. Прикладной программный интерфейс (API) модели DOM не особенно сложен, но в нем существует множество архитектурных особенностей, которые вы должны знать.

Прежде всего, следует понимать, что вложенные элементы HTML или XML-документов представлены в виде дерева объектов DOM. Древовидное представление HTML-документа содержит узлы, представляющие элементы или теги, такие как и

, и узлы, представляющие строки текста. HTML-документ также может содержать узлы, представляющие HTML-комментарии. Рассмотрим следующий простой HTML-документ:

DOM-представление этого документа приводится на следующей диаграмме:

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

Каждый прямоугольник на этой диаграмме является узлом документа, который представлен объектом Node. Обратите внимание, что на рисунке изображено три различных типа узлов. Корнем дерева является узел Document, который представляет документ целиком. Узлы, представляющие HTML-элементы, являются узлами типа Element, а узлы, представляющие текст, — узлами типа Text. Document, Element и Text — это подклассы класса Node. Document и Element являются двумя самыми важными классами в модели DOM.

Тип Node и его подтипы образуют иерархию типов, изображенную на диаграмме ниже. Обратите внимание на формальные отличия между обобщенными типами Document и Element, и типами HTMLDocument и HTMLElement. Тип Document представляет HTML и XML-документ, а класс Element представляет элемент этого документа. Подклассы HTMLDocument и HTMLElement представляют конкретно HTML-документ и его элементы:

На этой диаграмме следует также отметить наличие большого количества подтипов класса HTMLElement, представляющих конкретные типы HTML-элементов. Каждый из них определяет JavaScript-свойства, отражающие HTML-атрибуты конкретного элемента или группы элементов. Некоторые из этих специфических классов определяют дополнительные свойства или методы, которые не являются отражением синтаксиса языка разметки HTML.

Выбор элементов документа

Работа большинства клиентских программ на языке JavaScript так или иначе связана с манипулированием элементами документа. В ходе выполнения эти программы могут использовать глобальную переменную document, ссылающуюся на объект Document. Однако, чтобы выполнить какие-либо манипуляции с элементами документа, программа должна каким-то образом получить, или выбрать, объекты Element, ссылающиеся на эти элементы документа. Модель DOM определяет несколько способов выборки элементов. Выбрать элемент или элементы документа можно:

по значению атрибута id;

по значению атрибута name;

по имени класса или классов CSS;

по совпадению с определенным селектором CSS.

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

Выбор элементов по значению атрибута id

Все HTML-элементы имеют атрибуты >getElementById() объекта Document:

Это самый простой и самый распространенный способ выборки элементов. Если сценарию необходимо иметь возможность манипулировать каким-то определенным множеством элементов документа, присвойте значения атрибутам id этих элементов и используйте возможность их поиска по этим значениям.

В версиях Internet Explorer ниже IE8 метод getElementById() выполняет поиск значений атрибутов id без учета регистра символов и, кроме того, возвращает элементы, в которых будет найдено совпадение со значением атрибута name.

Выбор элементов по значению атрибута name

HTML-атрибут name первоначально предназначался для присваивания имен элементам форм, и значение этого атрибута использовалось, когда выполнялась отправка данных формы на сервер. Подобно атрибуту id, атрибут name присваивает имя элементу. Однако, в отличие от id, значение атрибута name не обязано быть уникальным: одно и то же имя могут иметь сразу несколько элементов, что вполне обычно при использовании в формах радиокнопок и флажков. Кроме того, в отличие от id, атрибут name допускается указывать лишь в некоторых HTML-элементах, включая формы, элементы форм и элементы и .

Выбрать HTML-элементы, опираясь на значения их атрибутов name, можно с помощью метода getElementsByName() объекта Document:

Метод getElementsByName() определяется не классом Document, а классом HTMLDocument, поэтому он доступен только в HTML-документах и не доступен в XML-документах. Он возвращает объект NodeList, который ведет себя, как доступный только для чтения массив объектов Element.

В IE метод getElementsByName() возвращает также элементы, значения атрибутов id которых совпадает с указанным значением. Чтобы обеспечить совместимость с разными версиями браузеров, необходимо внимательно подходить к выбору значений атрибутов и не использовать одни и те же строки в качестве значений атрибутов name и id.

Выбор элементов по типу

Метод getElementsByTagName() объекта Document позволяет выбрать все HTML или XML-элементы указанного типа (или по имени тега). Например, получить подобный массиву объект, доступный только для чтения, содержащий объекты Element всех элементов в документе, можно следующим образом:

Подобно методу getElementsByName(), getElementsByTagName() возвращает объект NodeList. Элементы документа включаются в массив NodeList в том же порядке, в каком они следуют в документе, т.е. первый элемент

в документе можно выбрать так:

Имена HTML-тегов не чувствительны к регистру символов, и когда getElementsByTagName() применяется к HTML-документу, он выполняет сравнение с именем тега без учета регистра символов. Переменная spans, созданная выше, например, будет включать также все элементы , которые записаны как .

Можно получить NodeList, содержащий все элементы документа, если передать методу getElementsByTagName() шаблонный символ «*».

Кроме того, классом Element также определяет метод getElementsByTagName(). Он действует точно так же, как и версия метода в классе Document, но выбирает только элементы, являющиеся потомками для элемента, относительно которого вызывается метод. То есть отыскать все элементы внутри первого элемента

можно следующим образом:

По историческим причинам класс HTMLDocument определяет специальные свойства для доступа к узлам определенных типов. Свойства images, forms и links, например, ссылаются на объекты, которые ведут себя как массивы, доступные только для чтения, содержащие элементы , и (но только те теги , которые имеют атрибут href). Эти свойства ссылаются на объекты HTMLCollection, которые во многом похожи на объекты NodeList, но дополнительно могут индексироваться значениями атрибутов id и name.

Объект HTMLDocument также определяет свойства-синонимы embeds и plugins, являющиеся коллекциями HTMLCollection элементов . Свойство anchors является нестандартным, но с его помощью можно получить доступ к элементам , имеющим атрибут name, но не имеющим атрибут href. Свойство scripts определено стандартом HTML5 и является коллекцией HTMLCollection элементов

Основы DOM

(Document Object Model)

Наиболее широко применяемы XML-расширением на сегодняшний день является DOM и simpleXML, оба из них были добавлены в 5 версии PHP. Кроме данных XML-расширений также применяются XML (XML-парсер) и DOMXML, однако эти технологии считаются устаревшими.

Работа с DOM осуществляется в объектно-ориентированном стиле. Для начала работы с ним нужно создать объект domDocument. На практике это выглядит примерно так:

$dom_xml = new DomDocument;

При создании нового объекта domDocument вызывается конструктор DOMDocument=>__construct, имеющий два необязательных аргумента, которые указывают на версию документа и его кодировку

_ _construct ([string version [, string encoding]])

После создания нового объекта domDocument необходимо загрузить данные. Осуществляется это при помощи методов DOMDocument->load() и DOMDocuтeпt->loadXML() , в первом случае данные загружаются из файла, а во втором из строки. На практике это выглядит примерно так:

//Загрузка данных из файла с явным указанием экземпляра класса:

$dom_xml = new DomDocument;
$dom_xml->load(‘file.xml‘);


//Загрузка данных из файла без явного указания экземпляра класса:

$dom_xml=DomDocument:: load(‘file.xml’);

//Загрузка данных из строки с явным указанием экземпляра класса:

$dom_xml = new DomDocument;
$dom_xml->loadXML(‘ volvo ‘);

//Загрузка данных из строки без явного указания экземпляра класса:

$dom_xml = DomDocument::lоаdХМL(‘ volvo ‘);

Если загрузка данных прошла успешно, то будет возвращено TRUE, если нет, то FALSE

После того как данные загружены чаще всего осуществляется разбор их. Осуществить это можно при помощи метода DomDocument->getElementsByTagName(). Этот метод возвращает коллекцию объектов DOMNode.

$dom_xml= new DomDocument();
$dom_xml->loadXML(‘ volvo Lada ‘);
//записываем название модели в переменную

Foreach ($mod as $element) <
echo $element->nodeValue.» «.$element->nodeName.» «.’
‘;
>
?>

volvo model
Lada model

Основные свойства объекта DOMNode

nodeValue Возвращает значения узлов childNodes Возвращает дочерние узлы для текущего узла firstChild Возвращает верхний (первый) дочерний узел lastChild Возвращает последний дочерний узел

Основные методы объекта DOMNode

removeChild() hasChildNodes() Осуществляет проверку на дочерние узлы appendChild() Добавляет элемент replaceChild() Замещает узел hasAttributes() Проверка атрибутов

Примеры работы с DOM можно увидеть на следующих страницах:

Создание XML файла средствами DOM XML

D OM XML предоставляет несколько удобных способов создания XML файлов. В этой статье мы рассмотрим один из них. В общем случае процедуру можно описать так:

  1. В первую очередь, нам необходимо создать объект типа Document с помощью объекта DocumentBuilder .
  2. Вновь созданный документ заполняется содержимым: узлами (нодами), элементами и атрибутами. Это делается с помощью класса Element .
  3. Наконец, с помощью объекта типа Transformer мы переводим объектное представление XML документа в текстовый вид. Текстовый вид XML документа, как правило, сохраняется в файл (хотя может быть, например, распечатано, что будет показано в настоящей статье).

XML DOM Учебное пособие

DOM определяет стандарт для доступа и работы с документами.

XML DOM представляет документ XML в виде древовидной структуры.

HTML DOM представляет HTML-документ в виде древовидной структуры.

Понимание DOM является обязательным для тех, кто работает с HTML или XML.

XML DOM Пример дерева

Что такое DOM?

DOM определяет стандарт для доступа к документам, как XML и HTML:

«The W3C Document Object Model (DOM) is a platform and language-neutral interface that allows programs and scripts to dynamically access and update the content, structure, and style of a document.»

DOM разделяется на 3 части / уровней:

  • Core DOM — стандартная модель для любого структурированного документа
  • XML DOM — стандартная модель для XML — документов
  • HTML DOM — стандартная модель для HTML — документов

DOM определяет objects and properties всех элементов документа, а также methods (interface) для доступа к ним.

HTML DOM

HTML DOM определяет стандартный способ для доступа и управления HTML-документов.

Все HTML-элементы могут быть доступны через HTML DOM.

HTML DOM определяет objects, properties and methods всех HTML — элементов.

Измените значение HTML-элемента

Этот пример изменяет значение HTML-элемента с :

пример

This is a Heading

Этот пример изменяет значение первого

элемента в HTML — документе:

пример

This is a Heading

This is a Heading


Примечание: Даже если containes документ HTML только ОДИН

элемента вам все равно придется указать индекс массива [0], потому что getElementsByTagName() метод всегда возвращает массив.

Вы можете узнать гораздо больше о HTML DOM в нашем JavaScript учебнике .

XML DOM

XML DOM определяет стандартный способ для доступа и манипулирования XML-документами.

Все элементы XML могут быть доступны через XML DOM.

XML DOM определяет objects, properties and methods всех элементов XML.

XML DOM является:

  • Стандартная модель объекта для XML
  • Стандартный интерфейс программирования для XML
  • Платформы и языка независимой
  • Стандарт W3C

Другими словами: The XML DOM is a standard for how to get, change, add, or delete XML elements. — The XML DOM is a standard for how to get, change, add, or delete XML elements. того, The XML DOM is a standard for how to get, change, add, or delete XML elements. — The XML DOM is a standard for how to get, change, add, or delete XML elements.

Получить значение элемента XML

Этот код извлекает текстовое значение первого элемента в документе XML:

Взаимодействие PHP и XML посредством DOM XML

Взаимодействие PHP и XML посредством DOM XML

Что происходит, если взаимодействие PHP и XML осуществляется с помощью объектной модели стандарта DOM ? Модуль DOM XML определяет в PHP несколько классов, таких как DomNode , DomDocument , DomElement , DomText и DomAttribute , большинство из которых идут из ядра стандарта DOM . Почти для всех классов (в частности, для перечисленных выше) класс DomNode является родительским , поэтому его свойства и методы наследуются всеми остальными классами.

Если рассмотреть произвольный XML -документ, то классу DomDocument будет соответствовать сам этот документ, классу DomElement – каждый XML -тег, классу DomAttribute – атрибуты тегов, а классу DomText – содержание XML- элементов . В то же время классу DomNode будет соответствовать каждый из перечисленных элементов XML -документа.

Рассмотрим коллекцию, содержащую описания персон. Если каждую из них мы описываем с помощью таких характеристик, как фамилия, имя, дата рождения и электронный адрес, то структура коллекции « Личности », где хранится информация обо всех известных нам персонах, может быть представлена следующим образом.

В дальнейшем, приводя примеры, мы будем использовать этот файл.

Нам необходимо научиться читать, добавлять, изменять и искать информацию, находящуюся в XML -файлах.

Перевод данных XML-файла в объекты и классы PHP

Первое, что нужно сделать, если мы хотим работать с XML -данными в PHP при помощи расширения DOM XML , это перевести имеющиеся данные в объекты и классы DOM . Это можно сделать несколькими способами.


    С помощью функции domxml_open_mem .

Такие функции, как domxml_open_mem() и domxml_open_file() , как правило, нужно вызывать перед вызовом любых других функций, связанных с расширением DOM .

Эти функции преобразуют XML -файл в дерево объектов. К таким объектам можно обращаться с помощью различных методов. В частности, для выделения корневого элемента используется метод DomDocument->document_element() .

Еще существует функция domxml_new_doc(string version) , которая создает новый пустой XML -документ. Ее параметром является номер версии создаваемого документа. Но ее мы касаться не будем, а будем считать, что XML -файл уже создан.

Итак, каждому элементу XML -файла мы поставили в соответствие какой-то объект. Теперь нужно научиться перемещаться по дереву объектов и обращаться с этими объектами: получать и изменять их значения, находить их потомков и предков, удалять объекты.

Обход дерева объектов

Для получения значения текущего узла (вне зависимости от его типа) используют метод DomNode->node_value() или DomNode->get_content() для получения содержимого узла.

Для получения значения атрибута используется метод DomElement->get_attribute (attr_name) . А метод DomNode->child_nodes() возвращает массив потомков данного узла.

Для того чтобы сделать обход дерева объектов, полезно еще уметь различать объекты по типам, т.е. определять, является ли узел элементом (тегом), текстом, атрибутом и т.п. Для этого используются специальные константы. XML_ELEMENT_NODE определяет, является ли узел элементом , XML_ATTRIBUTE_NODE определяет, является ли узел атрибутом, и XML_TEXT_NODE определяет, является ли узел куском текста. Эти константы имеют целочисленные значения 1 , 2 и 3 соответственно. Использование этих констант полезно, поскольку переводы строки, применяемые для удобочитаемости XML -файлов, тоже становятся узлами.

Итак, мы научились обходить дерево XML . Теперь можно попытаться что-нибудь найти в XML -файле. Правда, делать это не совсем удобно опять же из-за переносов строк, которые мы использовали при написании XML -файла. Пусть наш XML -файл записан в строку, а точнее, в нем есть следующая строка:

Тогда в наш предыдущий пример вставим (после вывода на экран полученных массивов) строчку для поиска электронного адреса Ивана Иванова.

Добавление новых элементов в XML-документ

Далее разберем задачу, как можно добавить в нашу базу данных новую личность средствами php.

Сначала нужно скопировать описание личности (считаем, что все личности описываются с помощью стандартного набора характеристик, как в файле persons.xml ). Это делается с помощью метода DomNode->clone_node() . Таким образом, мы клонируем элемент

и все его внутренние элементы (содержание тегов не копируется).

Потом можно установить какие-нибудь значения для элементов описания личности. Например, задать имя человека, дату его рождения и т.п. В конце нужно записать полученное описание личности в качестве потомка корневого элемента в дерево DOM с помощью метода DomNode->append_child(new_node) , где в качестве параметра передается созданный объект (новый узел).

В PHP до версии 4.3 перед добавлением потомка к узлу с помощью данной функции этот потомок сначала копировался. Таким образом, новый узел являлся новой копией, которая могла изменяться без изменения узла, переданного как параметр в эту функцию. В более поздних версиях PHP новый узел удаляется из существующего контекста, если он уже есть в дереве. Такое поведение соответствует спецификациям W3C.

Для удаления узла можно воспользоваться методом, применив его к узлу, который требуется удалить, т.е. DomNode->unlink_node() .

Пример 14.5. Добавление описания новой личности в каталог

DOM – Объектная модель документа для работы с XML файлами

DOM часть первая

В состав библиотеки базовых классов (BCL) платформы .NET Framework входит сборка System.Xml.dll, в которой хранится реализация технологии DOM.

XML DOM (Document Object Model)

DOM (Объектная модель документа) — это не зависящий от платформы и языка интерфейс, который позволяет получать доступ к XML файлам, изменять их структуру и содержимое.

Представляет содержимое файла XML в виде дерева узлов хранимое в памяти компьютера.


Принцип работы DOM

Для начала работы необходимо подключить в свой проект пространство имён: System.XML. Обычно оно подключается автоматически при создании проекта.

Основная работа с XML файлами осуществляться благодаря dll сборке System.Xml, которая предоставляет для работы с DOM все необходимые типы и члены.

Создание файла XML

Вне зависимости от типа задачи, любая работа с DOM, начинается с построения виртуального файла XML в памяти компьютера, точнее сказать каркаса будущего файла. В платформе .NET данную задачу решает класс XMLDocument. Для этого необходимо создать объект данного класса.

Открытие файла XML

После того, как виртуальный файл (каркас) создан. Можно перейти к работе с физическим файлом XML. Физический файл — это файл, который храниться на жёстком диске. Для работы с физическим файлом, применяется метод Load(), всё того же класса XMLDocument.

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

Пример создания создания виртуального файла.

После того, как был создан виртуальный файл в памяти компьютера, Вы можете начать работать с ним, как с обычным физическим файлом. То есть выполнять любые обычные операции: добавлять, изменять, удалять данные в файле XML и многое другое.

При этом надо помнить, что все изменения затрагивать виртуальный файл, а не физический!

Сохранение в XML файл

После того, как проделаны все необходимые операции над виртуальным файлом, необходимо выполнить выгрузку или сохранение данных в физический файл. Чтобы внести изменения в физический файл используется метод Save(), всё того же класса XMLDocument.

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

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

Узлы (Node)

Для дальнейшей работы нам понадобиться создать XML файл, который мы будем использовать в качестве примера.

Весь XML файл – это один объект, который можно представить в виде дерева узлов. Под узлом можно понимать любое содержимое файла XML, будь-то декларация, комментарий, элементы и другое. То есть нужно запомнить, что к чему бы мы не обращались в XML файле, с точки зрения DOM, будет являться узлом (Node). Один узёл может содержать любое количество элементов.

Если наш, выше описанный пример, представить в виде дерева, то получим следующее:

Типы узлов

Дерево представляет собой столб, под которым подразумевается корневой (root) элемент, в нашем случаи – это элемент “garage”. Все узлы крепятся к данному столбу, как ветки у дерева. Так как узлов может быть много, они делятся на типы, вот некоторые из них:

DOCUMENT документ document
ELEMENT элемент
ATTRIBUTE атрибут элемента
TEXT текстовый узел текст
COMMENT комментарий

В .NET Framework, для получения типа узла применяется класс Xml Node Type. А в свою очередь, для каждого типа есть свой класс для работы с ним.

Типы узлов и классы для работы с нимиXml Node Type .NET Framework Class

Document XmlDocument
Document Type XmlDocumentType
Element XmlElement
Attribute XmlAttribute
Text XmlText
Entity XmlEntity
Comment XmlComment

Корневой элемент

Как упоминалось ранее, корневой элемент является столбом, к которому крепятся узлы.

Для того, чтобы научиться передвигаться по дереву, необходимо для начала получить в нашем коде root-элемент, от которого мы будем отталкиваться, для достижения нужного узла.

Получение корневого элемента:

В результате выполнения данного кода, на экран будет выведено слово «garage», которое является именем нашего root-элемента. То есть доступ к корневому элементу был получен, и теперь отталкиваясь от этой точки, мы может перемещаться по дереву и получать нужные нам данные, а так же добавлять новые узлы в наше дерево, но об этом более подробно в следующей статье.

чЧЕДЕОЙЕ Ч DOM

Nicholas Chase

29 ЙАМС 2003

уПДЕТЦБОЙЕ

еЭЕ ДП РПСЧМЕОЙС XML УХЭЕУФЧПЧБМБ пВЯЕЛФОБС нПДЕМШ дПЛХНЕОФБ, Document Object Model ЙМЙ DOM. пОБ РПЪЧПМСЕФ ТБЪТБВПФЮЙЛХ ПВТБЭБФШУС Л ЛПНРПОЕОФБН Ч XML-УФТХЛФХТЕ, ЧЩВЙТБФШ Й ЙЪНЕОСФШ ЙИ Й СЧМСЕФУС ЧБЦОПК ДМС ТБВПФЩ У XML. ч ЬФПН ХЮЕВОЙЛЕ ЧЩ ХЪОБЕФЕ П УФТХЛФХТЕ ДПЛХНЕОФБ DOM. чЩ ФБЛЦЕ ХЪОБЕФЕ П ФПН, ЛБЛ ЙУРПМШЪПЧБФШ ФЕИОПМПЗЙА Java ДМС УПЪДБОЙС ПВЯЕЛФБ Document ЙЪ XML_ЖБКМБ, ЙЪНЕОЕОЙС ЕЗП Й ЧЩВПТЛЙ ТЕЪХМШФБФПЧ.

тБЪДЕМ 1. чЧЕДЕОЙЕ

оХЦЕО МЙ НОЕ ЬФПФ ХЮЕВОЙЛ?

ьФПФ ХЮЕВОЙЛ РТЕДОБЪОБЮЕО ДМС ТБЪТБВПФЮЙЛПЧ, ЛПФПТЩЕ РПОЙНБАФ ВБЪПЧЩЕ ЛПОГЕРГЙЙ XML Й ЗПФПЧЩ РЕТЕИПДЙФШ Л ЛПДЙТПЧБОЙА РТЙМПЦЕОЙК ДМС НБОЙРХМЙТПЧБОЙС XML РТЙ РПНПЭЙ DOM. нЩ РТЕДРПМБЗБЕН, ЮФП ЧЩ ЪОБЛПНЩ У ФБЛЙНЙ ЛПОГЕРГЙСНЙ, ЛБЛ РТБЧЙМШОПЕ ЖПТНБФЙТПЧБОЙЕ Й ФЕЗПЧПК РТЙТПДПК XML ДПЛХНЕОФБ. (еУМЙ ОХЦОП, ЧЩ НПЦЕФЕ ХЪОБФШ ПВ ПУОПЧБИ XML ЙЪ ХЮЕВОЙЛБ чЧЕДЕОЙЕ Ч XML.)

чУЕ РТЙНЕТЩ Ч ЬФПН ХЮЕВОЙЛЕ РТЙЧПДСФУС ДМС СЪЩЛБ Java, ОП ЧЩ НПЦЕФЕ ЧЩТБВПФБФШ РПОЙНБОЙЕ DOM ДБЦЕ, ЕУМЙ ЧЩ ОЕ ЧЩРПМОЙФЕ УБНЙ ЬФЙ РТЙНЕТЩ. лПОГЕРГЙЙ Й API ДМС ЛПДЙТПЧБОЙС РТЙМПЦЕОЙК, ЛПФПТЩЕ НБОЙРХМЙТХАФ XML-ДБООЩНЙ Ч DOM, ПДОЙ Й ФЕ ЦЕ ДМС МАВПЗП СЪЩЛБ ЙМЙ РМБФЖПТНЩ Й Е ЧЛМАЮБАФ Ч УЕВС РТПЗТБННЙТПЧБОЙС ЗТБЖЙЮЕУЛПЗП РПМШЪПЧБФЕМШУЛПЗП ЙОФЕТЖЕКУБ.

юФП ФБЛПЕ DOM?

пУОПЧПК тБУЫЙТСЕНПЗП сЪЩЛБ тБЪНЕФЛЙ, Extensible Markup Language ЙМЙ XML СЧМСЕФУС DOM. XML-ДПЛХНЕОФЩ УПДЕТЦБФ ЙЕТБТИЙА ЙОЖПТНБГЙПООЩИ ЕДЙОЙГ, ОБЪЩЧБЕНЩИ ХЪМБНЙ; DOM СЧМСЕФУС УРПУПВПН ПРЙУБОЙС ЬФЙИ ХЪМПЧ Й ПФОПЫЕОЙК НЕЦДХ ОЙНЙ.

чДПВБЧПЛ Л ЕЕ ТПМЙ ЛПОГЕРФХБМШОПЗП ПРЙУБОЙС XML-ДБООЩИ, DOM СЧМСЕФУС УЕТЙЕК тЕЛПНЕОДБГЙК, ЧЩТБВБФЩЧБЕНЩИ лПОУПТГЙХНПН World Wide Web (W3C). DOM ОБЮЙОБМБУШ ЛБЛ УРПУПВ ДМС Web-ВТБХЪЕТПЧ ДМС ЙДЕОФЙЖЙЛБГЙЙ Й НБОЙРХМЙТПЧБОЙС ЬМЕНЕОФБНЙ ОБ УФТБОЙГЕ — ЖХОЛГЙПОБМШОПУФЙ, ЛПФПТБС ЕЭЕ РТЕДЫЕУФЧПЧБМБ ЧПЧМЕЮЕОЙА Ч ОЕЕ W3C Й ЙЪЧЕУФОБ, ЛБЛ «DOM, хТПЧЕОШ 0».

дЕКУФЧХАЭБС тЕЛПНЕОДБГЙС DOM, УЕКЮБУ ПОБ ОБИПДЙФУС ОБ хТПЧОЕ 2 (ОБ НПНЕОФ ОБРЙУБОЙС ХЮЕВОЙЛБ хТПЧЕОШ 3 ОБИПДЙФУС ОБ РПУМЕДОЕН ЬФБРЕ ТБЪТБВПФЛЙ), СЧМСЕФУС API, ЛПФПТЩК ПРТЕДЕМСЕФ ПВЯЕЛФЩ, РТЕДУФБЧМСЕНЩЕ Ч XML-ДПЛХНЕОФЕ, Б ФБЛЦЕ НЕФПДЩ Й УЧПКУФЧБ, ЛПФПТЩЕ ЙУРПМШЪХАФУС ДМС ДПУФХРБ Л ОЙН Й НБОЙРХМЙТПЧБОЙС ЙНЙ.

ьФПФ ХЮЕВОЙЛ ДЕНПОУФТЙТХЕФ API сДТБ DOM (DOM Core) ЛБЛ УТЕДУФЧП ЮФЕОЙС Й НБОЙРХМЙТПЧБОЙС XML-ДБООЩНЙ ОБ РТЙНЕТЕ УЕТЙЙ ЪБЛБЪПЧ Ч УЙУФЕНЕ ФПТЗПЧМЙ. пО ФБЛЦЕ ПВХЮБЕФ ЧБУ, ЛБЛ УПЪДБЧБФШ ПВЯЕЛФЩ DOM Ч ЧБЫЕН УПВУФЧЕООПН РТПЕЛФЕ ДМС ИТБОЕОЙС ДБООЩИ Й ТБВПФЩ У ОЙНЙ.

йОУФТХНЕОФЩ

рТЙНЕТЩ Ч ЬФПН ХЮЕВОЙЛЕ, ЕУМЙ ЧЩ ТЕЫЙФЕ ЙИ ЧЩРПМОЙФШ, ФТЕВХАФ ХУФБОПЧЛЙ Й РТБЧЙМШОПК ТБВПФЩ УМЕДХАЭЕЗП ЙОУФТХНЕОФБТЙС. чЩРПМОЕОЙЕ РТЙНЕТПЧ ОЕ СЧМСЕФУС ПВСЪБФЕМШОЩН ФТЕВПЧБОЙЕН ДМС РПОЙНБОЙС.

  • фЕЛУФПЧЩК ТЕДБЛФПТ: XML-ЖБКМЩ СЧМСАФУС РТПУФЩН ФЕЛУФПН. дМС УПЪДБОЙС Й ЮФЕОЙС ЙИ ЧУЕ, ЮФП ЧБН ОХЦОП, ЬФП — ФЕЛУФПЧЩК ТЕДБЛФПТ.
  • Java 2 SDK, Standard Edition version 1.4.x: РПДДЕТЦЛБ DOM ЧУФТПЕОБ Ч РПУМЕДОЙЕ ЧЕТУЙЙ ФЕИОПМПЗЙЙ Java (ДПУФХРОЩ ОБ http://java.sun.com/j2se/1.4.2/download.html), ФБЛ ЮФП Х ЧБУ ОЕФ ОЕПВИПДЙНПУФЙ ХУФБОБЧМЙЧБФШ ЛБЛЙЕ-МЙВП ДПРПМОЙФЕМШОЩЕ ЛМБУУЩ. (еУМЙ ЧЩ ЙУРПМШЪХЕФЕ ВПМЕЕ ТБООАА ЧЕТУЙА СЪЩЛБ Java, ФБЛХА, ЛБЛ Java 1.3.x, ЧБН ФБЛЦЕ ОХЦЕО XML-РБТУЕТ, ФБЛПК, ЛБЛ Xerces-Java ЙЪ РТПЕЛФБ Apache (ДПУФХРЕО ОБ http://xml.apache.org/xerces2-j/index.html), ЙМЙ Java API for XML Parsing (JAXP) ЖЙТНЩ Sun, ЮБУФШ Java Web Services Developer Pack (ДПУФХРЕО ОБ http://java.sun.com/webservices/downloads/webservicespack.html).
  • дТХЗЙЕ СЪЩЛЙ: еУМЙ ЧЩ ТЕЫЙФЕ БДБРФЙТПЧБФШ РТЙНЕТЩ, ТЕБМЙЪБГЙЙ DOM ФБЛЦЕ ДПУФХРОЩ Й Ч ДТХЗЙИ СЪЩЛБИ РТПЗТБННЙТПЧБОЙС. чЩ НПЦЕФЕ ЧЩЗТХЪЙФШ ТЕБМЙЪБГЙЙ РБТУЕТБ Xerces ДМС C++ Й Perl У Apache Project ОБ http://xml.apache.org.


тБЪДЕМ 2. юФП ФБЛПЕ DOM?

DOM ЛБЛ УФТХЛФХТБ

рТЕЦДЕ, ЮЕН ОБЮЙОБФШ ТБВПФХ У DOM, УФПЙФ РПМХЮЙФШ РТЕДУФБЧМЕОЙЕ П ФПН, ЮФП ПОБ ОБ УБНПН ДЕМЕ РТЕДУФБЧМСЕФ. пВЯЕЛФ DOM Document СЧМСЕФУС ЛПММЕЛГЙЕК ХЪМПЧ ЙМЙ РПТГЙК ЙОЖПТНБГЙЙ, ПТЗБОЙЪПЧБООЩИ Ч ЙЕТБТИЙА. ьФБ ЙЕТБТИЙС РПЪЧПМСЕФ ТБЪТБВПФЮЙЛХ ДЧЙЗБФШУС РП ДЕТЕЧХ Ч РПЙУЛБИ ОХЦОПК ЙОЖПТНБГЙЙ. бОБМЙЪ УФТХЛФХТЩ ПВЩЮОП ФТЕВХЕФ, ЮФПВЩ ВЩМ ЪБЗТХЦЕО РПМОЩК ДПЛХНЕОФ, Й ЙЕТБТИЙС ВЩМБ РПУФТПЕОБ ДП ОБЮБМБ ТБВПФЩ. рПУЛПМШЛХ DOM ПУОПЧЩЧБЕФУС ОБ ЙЕТБТИЙЙ ЙОЖПТНБГЙЙ, РТП ОЕЕ ЗПЧПТСФ, ЮФП ПОБ ДТЕЧПЧЙДОП-ВБЪЙТПЧБООБС ЙМЙ ПВЯЕЛФОП-ВБЪЙТПЧБООБС.

дМС ЙУЛМАЮЙФЕМШОП ВПМШЫЙИ ДПЛХНЕОФПЧ ТБЪВПТ Й ЪБЗТХЪЛБ РПМОПЗП ДПЛХНЕОФБ НПЦЕФ ВЩФШ НЕДМЕООПК Й ТЕУХТУПЕНЛПК, ФБЛ ЮФП ДМС ТБВПФЩ У ФБЛЙНЙ ДБООЩНЙ НПЗХФ ПЛБЪБФШУС МХЮЫЙНЙ ДТХЗЙЕ УТЕДУФЧБ. уПВЩФЙКОП-ВБЪЙТПЧБООЩЕ НПДЕМЙ, ФБЛЙЕ, ЛБЛ Simple API for XML (SAX), ТБВПФБАФ ОБ РПФПЛЕ ДБООЩИ, ПВТБВБФЩЧБС ЕЗП РП НЕТЕ РПУФХРМЕОЙС. (SAX СЧМСЕФУС ФЕНПК ДТХЗПЗП ХЮЕВОЙЛБ Й ДТХЗЙИ УФБФЕК Ч XML-ЪПОЕ developerWorks. дПРПМОЙФЕМШОХА ЙОЖПТНБГЙА УН. Ч тЕУХТУЩ.) уПВЩФЙКОП-ВБЪЙТПЧБООЩК API ПВИПДЙФ ОЕПВИПДЙНПУФШ РПУФТПЕОЙС ДЕТЕЧБ Ч РБНСФЙ, ОП ЖБЛФЙЮЕУЛЙ ОЕ РПЪЧПМСЕФ ТБЪТБВПФЮЙЛХ ЙЪНЕОСФШ ДБООЩЕ Ч ЙУИПДОПН ДПЛХНЕОФЕ.

у ДТХЗПК УФПТПОЩ, DOM ФБЛЦЕ ПВЕУРЕЮЙЧБЕФ API, ЛПФПТЩК РПЪЧПМСЕФ ТБЪТБВПФЮЙЛХ ДПВБЧМСФШ ЙМЙ ХДБМСФШ ХЪМЩ Ч МАВПК ФПЮЛЕ ДЕТЕЧБ Ч ОБДМЕЦБЭЙН ПВТБЪПН УПЪДБООПН РТЙМПЦЕОЙЙ.

лБТФБ DOM

тБВПФБ У DOM ЪБФТБЗЙЧБЕФ ОЕУЛПМШЛП ЛПОГЕРГЙК, ЛПФПТЩЕ ТБВПФБАФ ЧНЕУФЕ. чЩ ЙЪХЮЙФЕ ПФОПЫЕОЙС НЕЦДХ ОЙНЙ Ч ЬФПН ХЮЕВОЙЛЕ.

рБТУЕТ — ЬФП РТПЗТБННОПЕ РТЙМПЦЕОЙЕ, ЛПФПТПЕ РТЕДОБЪОБЮЕОП ДМС ФПЗП, ЮФПВЩ БОБМЙЪЙТПЧБФШ ДПЛХНЕОФ — Ч ОБЫЕН УМХЮБЕ XML-ЖБКМ — Й ДЕМБФШ ЮФП-ФП ПРТЕДЕМЕООПЕ У ЕЗП ЙОЖПТНБГЙЕК. ч УПВЩФЙКОП-ВБЪЙТПЧБООПН API, ФБЛПН, ЛБЛ SAX, РБТУЕТ УПВЩФЙС ОЕЛПФПТПНХ УМХЫБФЕМА. ч ДТЕЧПЧЙДОП-ВБЪЙТПЧБООПН API , ФБЛПН, ЛБЛ DOM, РБТУЕТ УФТПЙФ Ч РБНСФЙ ДЕТЕЧП ДБООЩИ.

DOM ЛБЛ API

оБЮЙОБС У DOM хТПЧОС 1, DOM API УПДЕТЦЙФ ЙОФЕТЖЕКУЩ, ЛПФПТЩЕ РТЕДУФБЧМСАФ ЧУЕЧПЪНПЦОЩЕ ФЙРЩ ЙОЖПТНБГЙЙ, ЛПФПТЩЕ НПЗХФ ВЩФШ ОБКДЕОЩ Ч XML-ДПЛХНЕОФЕ, ФБЛЙЕ, ЛБЛ ЬМЕНЕОФЩ Й ФЕЛУФ. пО ФБЛЦЕ ЧЛМАЮБЕФ Ч УЕВС НЕФПДЩ Й УЧПКУФЧБ, ОЕПВИПДЙНЩЕ ДМС ТБВПФЩ У ЬФЙНЙ ПВЯЕЛФБНЙ.

хТПЧЕОШ 1 ЧЛМАЮБЕФ Ч УЕВС РПДДЕТЦЛХ XML 1.0 Й HTML, Ч ЛПФПТПК ЛБЦДЩК ЬМЕНЕОФ HTML РТЕДУФБЧМСЕФУС ЛБЛ ЙОФЕТЖЕКУ. пО ЧЛМАЮБЕФ Ч УЕВС НЕФПДЩ ДМС ДПВБЧМЕОЙС, ТЕДБЛФЙТПЧБОЙС, РЕТЕНЕЭЕОЙС Й ЮФЕОЙС ЙОЖПТНБГЙЙ, УПДЕТЦБЭЕКУС Ч ХЪМБИ Й Ф.Д. пО, ПДОБЛП, ОЕ ЧЛМАЮБЕФ Ч УЕВС РПДДЕТЦЛХ РТПУФТБОУФЧ ЙНЕО XML, ЛПФПТЩЕ ПВЕУРЕЮЙЧБАФ ЧПЪНПЦОПУФШ УЕЗНЕОФЙТПЧБФШ ЙОЖПТНБГЙА ЧОХФТЙ ДПЛХНЕОФБ.

рПДДЕТЦЛБ РТПУФТБОУФЧ ВЩМБ ДПВБЧМЕОБ Ч DOM хТПЧОС 2. хТПЧЕОШ 2 ТБУЫЙТСЕФ хТПЧЕОШ 1, РПЪЧПМСС ТБЪТБВПФЮЙЛБН ПВОБТХЦЙЧБФШ Й ЙУРПМШЪПЧБФШ ЙОЖПТНБГЙА РТПУФТБОУФЧ ЙНЕО, ЛПФПТБС НПЦЕФ ВЩФШ РТЙНЕОЙНБ Л ХЪМХ. хТПЧЕОШ 2 ДПВБЧМСЕФ ФБЛЦЕ ОЕУЛПМШЛП НПДХМЕК РПДДЕТЦЛЙ лБУЛБДЙТХЕНЩИ фБВМЙГ уФЙМЕК, Cascading Style Sheets (CSS), УПВЩФЙК Й ТБУЫЙТЕООЩИ НБОЙРХМСГЙК У ДЕТЕЧПН.

DOM хТПЧОС 3, Ч ОБУФПСЭЕЕ ЧТЕНС ОБИПДСЭЙКУС ОБ РПУМЕДОЕН ЬФБРЕ ТБЪТБВПФЛЙ, ЧЛМАЮБЕФ Ч УЕВС ХМХЮЫЕООХА РПДДЕТЦЛХ ПВЯЕЛФБ Document (РТЕДЩДХЭЙЕ ЧЕТУЙЙ ПУФБЧМСМЙ ЬФП ОБ ХУНПФТЕОЙЕ РТЙМПЦЕОЙК, ЮФП ДЕМБМП ЪБФТХДОЙФЕМШОЩН УПЪДБОЙЕ ТПДПЧЩИ РТЙМПЦЕОЙК), ТБУЫЙТЕООХА РПДДЕТЦЛХ РТПУФТБОУФЧ ЙНЕО, Й ОПЧЩЕ НПДХМЙ ДМС ЪБЗТХЪЛЙ Й УПИТБОЕОЙС ДПЛХНЕОФПЧ, РТПЧЕТЛЙ РТБЧЙМШОПУФЙ Й XPath, УТЕДУФЧБ ДМС ЧЩВПТБ ХЪМПЧ, ЙУРПМШЪХЕНЩЕ Ч XSL Transformations Й ДТХЗЙИ ФЕИОПМПЗЙСИ XML.

нПДХМСТЙЪБГЙС DOM ПЪОБЮБЕФ ДМС ТБЪТБВПФЮЙЛПЧ, ЮФП ЧЩ ДПМЦОЩ ЪОБФШ, РПДДЕТЦЙЧБАФУС МЙ ФЕ ЧПЪНПЦОПУФЙ, ЛПФПТЩЕ ЧЩ ИПФЙФЕ ЙУРПМШЪПЧБФШ, ФПК ТЕБМЙЪБГЙЕК DOM, У ЛПФПТПК ЧЩ ТБВПФБЕФЕ.

пРТЕДЕМЕОЙЕ ДПУФХРОПУФЙ УЧПКУФЧ

нПДХМШОБС УФТХЛФХТБ тЕЛПНЕОДБГЙК DOM ДБЕФ ЧПЪНПЦОПУФШ РТПЙЪЧПДЙФЕМСН ТЕБМЙЪБГЙК РЕТЕВЙТБФШ Й ЧЩВЙТБФШ, ЛБЛПК ТБЪДЕМ ЧЛМАЮБФШ Ч ЙИ РТПДХЛФ, ФБЛ ЮФП НПЦЕФ ВЩФШ ОЕПВИПДЙНЩН ПРТЕДЕМЙФШ, ДПУФХРОП МЙ ДБООПЕ ЛПОЛТЕФОПЕ УЧПКУФЧП, РТЕЦДЕ ЮЕН РЩФБФШУС ЙУРПМШЪПЧБФШ ЕЗП. ьФПФ ХЮЕВОЙЛ ЙУРПМШЪХЕФ ФПМШЛП API сДТБ DOM (Core DOM) хТПЧОС 2, ОП ЧБН УФПЙФ РПОЙНБФШ, ЛБЛ НПЦЕФ ВЩФШ УЧПКУФЧП ПВОБТХЦЕОП, ЛПЗДБ ЧЩ РЕТЕКДЕФЕ Л УПВУФЧЕООЩН РТПЕЛФБН.

пДОЙН ЙЪ ЙОФЕТЖЕКУПЧ, ПРТЕДЕМЕООЩИ Ч DOM, СЧМСЕФУС DOMImplementation . йУРПМШЪХС НЕФПД hasFeature() , ЧЩ НПЦЕФЕ ПРТЕДЕМЙФШ, РПДДЕТЦЙЧБЕФУС ЙМЙ ОЕФ ЛПОЛТЕФОПЕ УЧПКУФЧП. ч DOM хТПЧОС 2 ОЕФ УФБОДБТФОПЗП УРПУПВБ УПЪДБОЙС DOMImplementation , ОП УМЕДХАЭЙК ЛПД ДЕНПОУФТЙТХЕФ, ЛБЛ РТЙНЕОЙФШ hasFeature() ДМС ПРТЕДЕМЕОЙС, РПДДЕТЦЙЧБЕФУС МЙ НПДХМШ CSS DOM хТПЧОС 2 Ч РТЙМПЦЕОЙЙ Java.

(DOM хТПЧОС 3 ВХДЕФ ЧЛМАЮБФШ Ч УЕВС УФБОДБТФОЩЕ УТЕДУФЧБ ДМС УПЪДБОЙС DOMImplementation .)

ьФПФ ХЮЕВОЙЛ ЙУРПМШЪХЕФ ПДЙО ДПЛХНЕОФ ДМС ДЕНПОУФТБГЙЙ ПВЯЕЛФПЧ Й НЕФПДПЧ API сДТБ DOM.

вБЪПЧЩК XML-ЖБКМ

рТЙНЕТЩ ЧП ЧУЕН ЬФПН ХЮЕВОЙЛЕ ЙУРПМШЪХАФ XML-ЖБКМ, ЛПФПТЩК УПДЕТЦЙФ РТЙЧЕДЕООЩК ОЙЦЕ РТЙНЕТ ЛПДБ, РТЕДУФБЧМСАЭЙК ЪБЛБЪЩ, РТПИПДСЭЙЕ ЮЕТЕЪ ФПТЗПЧХА УЙУФЕНХ. лТБФЛП, ПУОПЧОЩНЙ ЮБУФСНЙ XML-ЖБКМБ СЧМСАФУС:

  • XML-ПВЯСЧМЕОЙЕ: пУОПЧОПЕ ПВЯСЧМЕОЙЕ ПРТЕДЕМСЕФ ЬФПФ ЖБКМ, ЛБЛ XML-ДПЛХНЕОФ. оЕ СЧМСЕФУС ПВЭЕРТЙОСФЩН ЪБДБОЙЕ ЛПДЙТПЧЛЙ Ч ПВЯСЧМЕОЙЙ, ЛБЛ РПЛБЪБОП ОЙЦЕ. ъДЕУШ ОЕ ЙНЕЕФ ЪОБЮЕОЙС, ЛБЛПК СЪЩЛ ЙМЙ ЛПДЙТПЧЛХ ЙУРПМШЪХЕФ XML-ЖБКМ, РБТУЕТ Ч УПУФПСОЙЙ ЮЙФБФШ ЕЗП РТБЧЙМШОП, РПЛБ ПО РПОЙНБЕФ ДБООХА ЛПДЙТПЧЛХ.
  • пВЯСЧМЕОЙЕ DOCTYPE : XML СЧМСЕФУС ХДПВОЩН УРПУПВПН ДМС ПВНЕОБ ДБООЩНЙ НЕЦДХ МАДШНЙ Й НБЫЙОБНЙ, ОП ЮФПВЩ ПВНЕО ТБВПФБМ ЗМБДЛП, ОЕПВИПДЙН ПВЭЙК УМПЧБТШ. оЕПВСЪБФЕМШОПЕ ПВЯСЧМЕОЙЕ DOCTYPE НПЦЕФ ВЩФШ ЙУРПМШЪПЧБОП ДМС ХЛБЪБОЙС ДПЛХНЕОФБ — Ч ДБООПН УМХЮБЕ, orders.dtd — У ЛПФПТЩН ЖБКМ НПЦЕФ ВЩФШ УТБЧОЕО, ЮФПВЩ ХВЕДЙФШУС, ЮФП Ч ОЕН ОЕФ МЙЫОЕК ЙМЙ ОЕДПУФБАЭЕК ЙОЖПТНБГЙЙ (ОБРТЙНЕТ, ПФУХФУФЧХЕФ userid ЙМЙ ПЫЙВПЮОПЕ ЙНС ЬМЕНЕОФБ). дПЛХНЕОФЩ, ПВТБВПФБООЩЕ ФБЛЙН ПВТБЪПН, ОБЪЩЧБАФУС РТБЧЙМШОЩНЙ (valid) ДПЛХНЕОФБНЙ. хУРЕЫОБС РТПЧЕТЛБ РТБЧЙМШОПУФЙ ОЕ СЧМСЕФУС ПВСЪБФЕМШОПК ДМС XML, Й С ЖБЛФЙЮЕУЛЙ ВХДХ ПУФБЧМСФШ ПВЯСЧМЕОЙЕ DOCTYPE ЪБ ДПЛХНЕОФПН Ч РПУМЕДХАЭЙИ РТЙНЕТБИ.
  • уБНЙ ДБООЩЕ: дБООЩЕ Ч XML-ДПЛХНЕОФЕ ДПМЦОЩ УПДЕТЦБФШУС ЧОХФТЙ ЕДЙОУФЧЕООПЗП ЛПТОЕЧПЗП ЬМЕНЕОФБ, ФБЛПЗП, ЛБЛ ЬМЕНЕОФ orders ОЙЦЕ. юФПВЩ XML-ДПЛХНЕОФ НПЗ ПВТБВБФЩЧБФШУС, ПО ДПМЦЕО ВЩФШ РТБЧЙМШОП ЖПТНБФЙТПЧБООЩН (well-formed).

ч DOM ТБВПФБ У XML-ЙОЖПТНБГЙЕК ПЪОБЮБЕФ ТБЪВЙЕОЙЕ ЕЕ УОБЮБМБ РП ХЪМБН.

тБЪДЕМ 3. тБЪМЙЮОЩЕ ФЙРЩ ХЪМПЧ XML

уПЪДБОЙЕ ЙЕТБТИЙЙ

DOM, Ч УХЭОПУФЙ, СЧМСЕФУС ЛПММЕЛГЙЕК ХЪМПЧ. рТЙ ФПН, ЮФП Ч ДПЛХНЕОФЕ РПФЕОГЙБМШОП УПДЕТЦБФУС ТБЪОЩЕ ФЙРЩ ЙОЖПТНБГЙЙ, ПРТЕДЕМЕОП Й ОЕУЛПМШЛП ФЙРПЧ ХЪМПЧ.

рТЙ УПЪДБОЙЙ ЙЕТБТИЙЙ ДМС XML-ЖБКМБ ЕУФЕУФЧЕООП ЧЩТБВПФБФШ ОЕЮФП ЛПОГЕРФХБМШОПЕ, ОБРПДПВЙЕ РТЙЧЕДЕООПК ЧЩЫЕ УФТХЛФХТЩ. иПФС ПОБ РТБЧЙМШОП ПРЙУЩЧБЕФ УПУФБЧ ЧЛМАЮЕООЩИ Ч ЛПОГЕРГЙА ДБООЩЕ, ПОБ ОЕ ДБЕФ ПРЙУБОЙС ДБООЩИ У ФПЮЛЙ ЪТЕОЙС ЙИ РТЕДУФБЧМЕОЙС Ч DOM. ьФП РПФПНХ, ЮФП ПОБ РТЕДУФБЧМСЕФ ЬМЕНЕОФЩ , Б ОЕ ХЪМЩ .

тБЪМЙЮЙЕ НЕЦДХ ЬМЕНЕОФБНЙ Й ХЪМБНЙ

жБЛФЙЮЕУЛЙ, ЬМЕНЕОФЩ СЧМСАФУС ФПМШЛП ПДОЙН ФЙРПН ХЪМПЧ, Й ПОЙ ДБЦЕ ОЕ ЧЩДЕМЕОЩ ОБ РТЕДЩДХЭЕН ТЙУХОЛЕ. ьМЕНЕОФОЩК ХЪЕМ — ЬФП ЛПОФЕКОЕТ ДМС ЙОЖПТНБГЙЙ. ьФБ ЙОЖПТНБГЙС НПЦЕФ ВЩФШ ДТХЗЙНЙ ЬМЕНЕОФОЩНЙ ХЪМБНЙ, ФЕЛУФПЧЩНЙ ХЪМБНЙ, ХЪМБНЙ БФТЙВХФПЧ ЙМЙ ДТХЗПЗП ФЙРБ. вПМЕЕ РТБЧЙМШОБС ЛБТФЙОБ ДМС ДПЛХНЕОФБ РПЛБЪБОБ ОЙЦЕ:

рТСНПХЗПМШОЙЛЙ РТЕДУФБЧМСАФ ЬМЕНЕОФОЩЕ ХЪМЩ, Б ПЧБМЩ РТЕДУФБЧМСАФ ФЕЛУФПЧЩЕ ХЪМЩ. еУМЙ ПДЙО ХЪЕМ УПДЕТЦЙФ Ч УЕВЕ ДТХЗПК, ФП РПУМЕДОЙК ТБУУНБФТЙЧБЕФУС ЛБЛ РПФПНПЛ ЬФПЗП ХЪМБ.

ъБНЕФШФЕ, ЮФП ЬМЕНЕОФ orders ЙНЕЕФ ОЕ ДЧХИ, Б РСФШ РПФПНЛПЧ: ДЧБ ЬМЕНЕОФБ order Й ФЕЛУФПЧЩЕ ХЪМЩ НЕЦДХ ОЙНЙ Й ЧПЛТХЗ ОЙИ. оЕУНПФТС ОБ ФП, ЮФП ПОЙ ОЕ ЙНЕАФ УПДЕТЦЙНПЗП, РТПРХУЛЙ НЕЦДХ ЬМЕНЕОФБНЙ order УПУФБЧМСАФ ФЕЛУФПЧЩК ХЪЕМ. бОБМПЗЙЮОП, item ЙНЕЕФ УЕНШ РПФПНЛПЧ: name , price , qty Й ЮЕФЩТЕ ФЕЛУФПЧЩИ ХЪМБ ЧПЛТХЗ ОЙИ.

ъБНЕФШФЕ ФБЛЦЕ, ЮФП ФП, ЮФП НПЦЕФ ТБУУНБФТЙЧБФШУС ЛБЛ УПДЕТЦЙНПЕ ЬМЕНЕОФБ, ОБРТЙНЕТ, «Premium Cinch», ОБ УБНПН ДЕМЕ СЧМСЕФУС УПДЕТЦЙНЩН ФЕЛУФПЧПЗП ХЪМБ, ЛПФПТЩК СЧМСЕФУС РПФПНЛПН ЬМЕНЕОФБ name.

(дБЦЕ ЬФПФ ТЙУХОПЛ ОЕ СЧМСЕФУС ЪБЛПОЮЕООЩН, ПУФБЧМСС ЧОЕ УЖЕТЩ ЧОЙНБОЙС, РПНЙНП РТПЮЕЗП, ХЪМЩ БФТЙВХФПЧ.)

вБЪПЧЩЕ ФЙРЩ ХЪМПЧ: ДПЛХНЕОФ, ЬМЕНЕОФ, БФТЙВХФ Й ФЕЛУФ

оБЙВПМЕЕ ТБУРТПУФТБОЕООЩНЙ ФЙРБНЙ ХЪМПЧ Ч XML СЧМСАФУС:

  • ьМЕНЕОФЩ: ьМЕНЕОФЩ СЧМСАФУС ВБЪПЧЩНЙ УФТПЙФЕМШОЩНЙ ВМПЛБНЙ XML. пВЩЮОП ЬМЕНЕОФЩ ЙНЕАФ РПФПНЛПЧ, ЛПФПТЩНЙ СЧМСАФУС ДТХЗЙЕ ЬМЕНЕОФЩ, ФЕЛУФПЧЩЕ ХЪМЩ ЙМЙ ЙИ ЛПНВЙОБГЙС. ьМЕНЕОФОЩЕ ХЪМЩ ФБЛЦЕ СЧМСАФУС ЕДЙОУФЧЕООЩН ФЙРПН ХЪМПЧ, ЙНЕАЭЙН БФТЙВХФЩ.
  • бФТЙВХФЩ: хЪМЩ БФТЙВХФПЧ УПДЕТЦБФ ЙОЖПТНБГЙА ПВ ЬМЕНЕОФОПН ХЪМЕ, ОП ОЕ ТБУУНБФТЙЧБАФУС ЛБЛ РПФПНЛЙ ЬМЕНЕОФБ, ЛБЛ Ч:
  • фЕЛУФ: фЕЛУФПЧЩК ХЪЕМ — ЬФП ЙНЕООП ФЕЛУФ. пО НПЦЕФ УПДЕТЦБФШ ЙОЖПТНБГЙА ЙМЙ ФПМШЛП РТПРХУЛ.
  • дПЛХНЕОФ: хЪЕМ ДПЛХНЕОФБ СЧМСЕФУС ПВЭЙН РТЕДЛПН ДМС ЧУЕИ ДТХЗЙИ ХЪМПЧ Ч ДПЛХНЕОФЕ.

нЕОЕЕ ТБУРТПУФТБОЕООЩЕ ФЙРЩ ХЪМПЧ: CDATA, ЛПННЕОФБТЙЙ, ЙОУФТХЛГЙЙ ПВТБВПФЛЙ Й ЖТБЗНЕОФЩ ДПЛХНЕОФБ

дТХЗЙЕ ФЙРЩ ХЪМПЧ ЙУРПМШЪХАФУС ОЕ ФБЛ ЮБУФП, ОП ЧУЕ ТБЧОП ЧБЦОЩ Ч ОЕЛПФПТЩИ УЙФХБГЙСИ. ч ЙИ ЮЙУМП ЧИПДСФ:

  • CDATA: уПЛТБЭЕОЙЕ ПФ Character Data (УЙНЧПМШОЩЕ ДБООЩЕ), ЬФП ХЪЕМ, УПДЕТЦБЭЙК ЙОЖПТНБГЙА, ЛПФПТБС ОЕ ДПМЦОБ БОБМЙЪЙТПЧБФШУС РБТУЕТПН. чНЕУФП ЬФПЗП ПОБ ДПМЦОБ РТПУФП РЕТЕДБЧБФШУС ЛБЛ ПВЩЮОЩК ФЕЛУФ. оБРТЙНЕТ, Ч ОЕК НПЦЕФ ВЩФШ ЪБРЙУБО HTML ДМС УРЕГЙБМШОЩИ ГЕМЕК. рТЙ ОПТНБМШОЩИ ПВУФПСФЕМШУФЧБИ РТПГЕУУПТ ДПМЦЕО РЩФБФШУС УПЪДБФШ ЬМЕНЕОФЩ ЙЪ ЛБЦДПЗП ЪБРЙУБООПЗП ФЕЗБ, ЛПФПТЩК ДБЦЕ НПЦЕФ ОЕ ВЩФШ РТБЧЙМШОП ЖПТНБФЙТПЧБООЩН. ьФЙ РТПВМЕНЩ НПЗХФ ВЩФШ ПВПКДЕОЩ РТЙНЕОЕОЙЕН УЕЛГЙК CDATA. ьФЙ УЕЛГЙЙ ЪБРЙУЩЧБАФУС Ч УРЕГЙБМШОПК ОПФБГЙЙ:
  • лПННЕОФБТЙЙ: лПННЕОФБТЙЙ ЧЛМАЮБАФ Ч УЕВС ЙОЖПТНБГЙА П ДБООЩИ Й ПВЩЮОП ЙЗОПТЙТХАФУС РТЙМПЦЕОЙЕН. пОЙ ЪБРЙУЩЧБАФУС ЛБЛ:
  • йОУФТХЛГЙЙ ПВТБВПФЛЙ: йОУФТХЛГЙЙ ПВТБВПФЛЙ — ЬФП ЙОЖПТНБГЙС, УРЕГЙБМШОП БДТЕУПЧБООБС РТЙМПЦЕОЙА. оЕЛПФПТЩНЙ РТЙНЕТБНЙ СЧМСАФУС ЛПДЩ, ЛПФПТЩЕ ДПМЦОЩ ВЩФШ ЧЩРПМОЕОЩ, ЙМЙ ЙОЖПТНБГЙС П ФПН, ЗДЕ ОБКФЙ ФБВМЙГХ УФЙМЕК. оБРТЙНЕТ:
  • жТБЗНЕОФЩ ДПЛХНЕОФБ: юФПВЩ ВЩФШ РТБЧЙМШОП ЖПТНБФЙТПЧБООЩН, ДПЛХНЕОФ ДПМЦЕО ЙНЕФШ ФПМШЛП ПДЙО ЛПТОЕЧПК ЬМЕНЕОФ. йОПЗДБ РТЙ ТБВПФЕ У XML ДПМЦОЩ ЧТЕНЕООП УПЪДБЧБФШУС ЗТХРРЩ ЬМЕНЕОФПЧ, ДМС ЛПФПТЩИ ОЕФ ОЕПВИПДЙНПУФЙ ХДПЧМЕФЧПТСФШ ЬФПНХ ФТЕВПЧБОЙА. жТБЗНЕОФ ДПЛХНЕОФБ ЧЩЗМСДЙФ ФБЛ:

дТХЗЙЕ ФЙРЩ ХЪМПЧ ЧЛМАЮБАФ Ч УЕВС УХЭОПУФЙ, ХЪМЩ УУЩМПЛ ОБ УХЭОПУФЙ Й ОПФБГЙЙ. пДОЙН ЙЪ УРПУПВПЧ ДПРПМОЙФЕМШОПК ПТЗБОЙЪБГЙЙ XML-ДБООЩИ СЧМСЕФУС РТЙНЕОЕОЙЕ РТПУФТБОУФЧ ЙНЕО.

тБЪДЕМ 4. рТПУФТБОУФЧБ ЙНЕО

юФП ФБЛПЕ РТПУФТБОУФЧП ЙНЕО?

пДОП ЙЪ ЗМБЧОЩИ ХУПЧЕТЫЕОУФЧПЧБОЙК НЕЦДХ DOM хТПЧОС 1 Й DOM хТПЧОС 2 СЧМСЕФУС ДПВБЧМЕОЙЕ РПДДЕТЦЛЙ РТПУФТБОУФЧ ЙНЕО. рПДДЕТЦЛБ РТПУФТБОУФЧ ЙНЕО РПЪЧПМСЕФ ТБЪТБВПФЮЙЛБН ЙУРПМШЪПЧБФШ ЙОЖПТНБГЙА ЙЪ ТБЪОЩИ ЙУФПЮОЙЛПЧ ЙМЙ Ч ТБЪОЩИ ГЕМСИ ВЕЪ ЛПОЖМЙЛФПЧ.

лПОГЕРФХБМШОП РТПУФТБОУФЧБ ЙНЕО СЧМСАФУС ЪПОБНЙ, Ч ЛПФПТЩИ ЧУЕ ЙНЕОБ ДПМЦОЩ ВЩФШ ХОЙЛБМШОЩ.

оБРТЙНЕТ, С ТБВПФБА Ч ПЖЙУЕ Й Х НЕОС ФП ЦЕ ЙНС, ЮФП Й Х ЛМЙЕОФБ. еУМЙ С ЗДЕ-ФП Ч ПЖЙУЕ, Й УЕЛТЕФБТШ ЗПЧПТЙФ: «оЙЛ, ЧПЪШНЙ ФТХВЛХ ОБ 1-К МЙОЙЙ», — ЛБЦДЩК РПОЙНБЕФ, ЮФП ПОБ ЙНЕЕФ Ч ЧЙДХ НЕОС, РПФПНХ ЮФП С ОБИПЦХУШ Ч «РТПУФТБОУФЧЕ ЙНЕО ПЖЙУБ». бОБМПЗЙЮОП, ЕУМЙ ПОБ ЗПЧПТЙФ «оЙЛ ЪЧПОЙФ РП 1-К МЙОЙЙ», — ЛБЦДЩК ЪОБЕФ, ЮФП ПОБ ЗПЧПТЙФ П ЛМЙЕОФЕ, РПФПНХ ЮФП ЪЧПОСЭЙК ОБИПДЙФУС ЧОЕ РТПУФТБОУФЧБ ЙНЕО ПЖЙУБ.

у ДТХЗПК УФПТПОЩ, ЕУМЙ С ОБИПЦХУШ ЧОЕ ПЖЙУБ, Й ПОБ ДЕМБЕФ ФБЛПЕ ЦЕ ЪБСЧМЕОЙЕ, ЧПЪНПЦОП ОЕДПТБЪХНЕОЙЕ, РПУЛПМШЛХ УХЭЕУФЧХАФ ДЧЕ ЧПЪНПЦОПУФЙ.

фЕ ЦЕ РТПВМЕНЩ ЧПЪОЙЛБАФ, ЛПЗДБ XML-ДБООЩЕ ЙЪ ТБЪОЩИ ЙУФПЮОЙЛПЧ ЛПНВЙОЙТХАФУС (ЛБЛ Ч ЙОЖПТНБГЙЙ П ЛТЕДЙФПУРПУПВОПУФЙ Ч ЖБКМЕ-РТЙНЕТЕ, РПДТПВОП ТБУУНБФТЙЧБЕНПН Ч ЬФПН ХЮЕВОЙЛЕ РПЪЦЕ).


уПЪДБОЙЕ РТПУФТБОУФЧБ ЙНЕО

рПУЛПМШЛХ ЙДЕОФЙЖЙЛБФПТЩ ДМС РТПУФТБОУФЧ ЙНЕО ДПМЦОЩ ВЩФШ ХОЙЛБМШОЩНЙ, ПОЙ ПВПЪОБЮБАФУС РТЙ РПНПЭЙ хОЙЖЙГЙТПЧБООЩИ йДЕОФЙЖЙЛБФПТПЧ тЕУХТУПЧ, Uniform Resource Identifiers ЙМЙ URI. оБРТЙНЕТ, РТПУФТБОУФЧП ЙНЕО РП ХНПМЮБОЙА ДМС ДБООЩИ РТЙНЕТБ ВХДЕФ ПВПЪОБЮЕОП РТЙ РПНПЭЙ БФТЙВХФБ xmlns :

(нОПЗПФПЮЙЕ РТЕДУФБЧМСЕФ ОЕУХЭЕУФЧЕООЩК ЖТБЗНЕОФ.)

мАВЩЕ ЬМЕНЕОФЩ, ДМС ЛПФПТЩИ ОЕ ХЛБЪБОП РТПУФТБОУФЧП ЙНЕО, ОБИПДСФУС Ч РТПУФТБОУФЧЕ ЙНЕО РП ХНПМЮБОЙА, http://www.nicholaschase.com/orderSystem.html . ч ДЕКУФЧЙФЕМШОПУФЙ УБН URI ОЙЮЕЗП ОЕ ПЪОБЮБЕФ. йОЖПТНБГЙС НПЦЕФ ОБИПДЙФШУС ЙМЙ ОЕ ОБИПДЙФШУС РП ЬФПНХ БДТЕУХ, ОП ЮФП ЧБЦОП, ФБЛ ЬФП ФП, ЮФП ПО ХОЙЛБМЕО.

чБЦОП ПФНЕФЙФШ ЗТПНБДОХА ТБЪОЙГХ НЕЦДХ РТПУФТБОУФЧПН ЙНЕО РП ХНПМЮБОЙА Й ПФУХФУФЧЙЕН РТПУФТБОУФЧБ ЙНЕО ЧППВЭЕ. ч ЬФПН УМХЮБЕФ ЬМЕНЕОФЩ, ЛПФПТЩЕ ОЕ ЙНЕАФ РТЕЖЙЛУБ РТПУФТБОУФЧБ ЙНЕО, ОБИПДСФУС Ч РТПУФТБОУФЧЕ ЙНЕО РП ХНПМЮБОЙА. еУМЙ ЦЕ ОЕ УХЭЕУФЧХЕФ РТПУФТБОУФЧБ ЙНЕО РП ХНПМЮБОЙА, ФБЛЙЕ ЬМЕНЕОФЩ ОБИПДСФУС ЧОЕ РТПУФТБОУФЧБ ЙНЕО.

чЩ НПЦЕФЕ ФБЛЦЕ УПЪДБЧБФШ ЧФПТЙЮОЩЕ РТПУФТБОУФЧБ ЙНЕО Й ДПВБЧМСФШ Ч ОЙИ ЬМЕНЕОФЩ ЙМЙ БФТЙВХФЩ.

пРТЕДЕМЕОЙЕ РТПУФТБОУФЧ ЙНЕО

дМС ДБООЩИ НПЗХФ ВЩФШ ПРТЕДЕМЕОЩ ФБЛЦЕ Й ДТХЗЙЕ РТПУФТБОУФЧБ ЙНЕО. оБРТЙНЕТ, УПЪДБОЙЕН РТПУФТБОУФЧБ ЙНЕО rating ЧЩ НПЦЕФЕ ДПВБЧЙФШ ЙОЖПТНБГЙА ПГЕОЛЙ ЛТЕДЙФПУРПУПВОПУФЙ Ч ФЕЛУФ ЪБЛБЪБ, ОЕ ВЕУРПЛПСУШ ПВ ЙНЕАЭЙИУС ДБООЩИ.

рТПУФТБОУФЧП ЙНЕО ЧНЕУФЕ У БМЙБУПН УПЪДБАФУС ПВЩЮОП (ОП ОЕ ПВСЪБФЕМШОП) Ч ЛПТОЕЧПН ЬМЕНЕОФЕ ДПЛХНЕОФБ. ьФПФ БМЙБУ ЙУРПМШЪХЕФУС ЛБЛ РТЕЖЙЛУ ДМС ЬМЕНЕОФПЧ Й БФТЙВХФПЧ — РТЙ ОЕПВИПДЙНПУФЙ, ЕУМЙ ЙУРПМШЪХЕФУС ВПМЕЕ ПДОПЗП РТПУФТБОУФЧБ ЙНЕО, — ЮФПВЩ ЪБДБФШ РТБЧЙМШОПЕ РТПУФТБОУФЧП ЙНЕО.

тБУУНПФТЙН ЛПД, РТЙЧЕДЕООЩК ОЙЦЕ. рТПУФТБОУФЧП ЙНЕО Й БМЙБУ, rating , ЙУРПМШЪПЧБОЩ ДМС УПЪДБОЙС ЬМЕНЕОФБ creditRating .

йОЖПТНБГЙС РТПУФТБОУФЧБ ЙНЕО НПЦЕФ ВЩФШ РПМХЮЕОБ ДМС ХЪМБ РПУМЕ ФПЗП, ЛБЛ ДПЛХНЕОФ ВЩМ ТБЪПВТБО.

тБЪДЕМ 5. тБЪВПТ ЖБКМБ Ч ДПЛХНЕОФ

фТЕИЫБЗПЧЩК РТПГЕУУ

юФПВЩ ТБВПФБФШ У ЙОЖПТНБГЙЕК Ч XML-ЖБКМЕ, ЖБКМ ДПМЦЕО ВЩФШ ТБЪПВТБО ДМС УПЪДБОЙС ПВЯЕЛФБ Document .

пВЯЕЛФ Document СЧМСЕФУС ЙОФЕТЖЕКУПН, ФБЛ ЮФП ЕЗП ЬЛЪЕНРМСТ ОЕ НПЦЕФ ВЩФШ УПЪДБО ОЕРПУТЕДУФЧЕООП, ПВЩЮОП ЧНЕУФП ЬФПЗП РТЙМПЦЕОЙЕ ЙУРПМШЪХЕФ ЖБВТЙЛХ. рПДТПВОПУФЙ ЬФПЗП РТПГЕУУБ ТБЪМЙЮБАФУС ПФ ТЕБМЙЪБГЙЙ Л ТЕБМЙЪБГЙЙ, ОП ЙДЕЙ ПДОЙ Й ФЕ ЦЕ. (пРСФШ-ФБЛЙ, хТПЧЕОШ 3 УФБОДБТФЙЪЙТХЕФ ЬФХ ЪБДБЮХ.) оБРТЙНЕТ, Ч УТЕДЕ Java ТБЪВПТ ЖБКМБ СЧМСЕФУС 3-ЫБЗПЧЩН РТПГЕУУПН:

  1. уПЪДБОЙЕ DocumentBuilderFactory . ьФПФ ПВЯЕЛФ УПЪДБЕФ DocumentBuilder .
  2. уПЪДБОЙЕ DocumentBuilder . DocumentBuilder ДЕКУФЧЙФЕМШОП ЧЩРПМОСЕФ ТБЪВПТ ДМС УПЪДБОЙС ПВЯЕЛФБ Document .
  3. тБЪВПТ ЖБКМБ ДМС УПЪДБОЙС ПВЯЕЛФБ Document .

фЕРЕТШ ЧЩ НПЦЕФЕ ОБЮБФШ РПУФТПЕОЙЕ РТЙМПЦЕОЙС.

вБЪПЧПЕ РТЙМПЦЕОЙЕ

оБЮОЕН У УПЪДБОЙС ВБЪПЧПЗП РТЙМПЦЕОЙС, ЛМБУУБ У ЙНЕОЕН OrderProcessor .

уОБЮБМБ Java-ЛПД ЙНРПТФЙТХЕФ ОЕПВИПДЙНЩЕ ЛМБУУЩ, Б ЪБФЕН УПЪДБЕФ РТЙМПЦЕОЙЕ OrderProcessor . рТЙНЕТЩ Ч ЬФПН ХЮЕВОЙЛЕ ТБУУНБФТЙЧБАФ ПДЙО ЖБКМ, ФБЛ ЮФП ДМС ЛТБФЛПУФЙ РТЙМПЦЕОЙЕ УПДЕТЦЙФ РТСНХА УУЩМЛХ ОБ ОЕЗП.

фБЛ ЛБЛ ПВЯЕЛФ Document НПЦЕФ ВЩФШ ЙУРПМШЪПЧБО РПЪЦЕ, РТЙМПЦЕОЙЕ ПРТЕДЕМСЕФ ЕЗП ЧОЕ ВМПЛБ try-catch .

ч ВМПЛЕ try-catch РТЙМПЦЕОЙЕ УПЪДБЕФ ПВЯЕЛФ DocumentBuilderFactory , ЛПФПТЩК ЪБФЕН ЙУРПМШЪХЕФУС ДМС УПЪДБОЙС DocumentBuilder . оБЛПОЕГ, DocumentBuilder ТБЪВЙТБЕФ ЖБКМ ДМС УПЪДБОЙС Document .

хУФБОПЧЛЙ РБТУЕТБ

пДОП ЙЪ РТЕЙНХЭЕУФЧ УПЪДБОЙС РБТУЕТПЧ РТЙ РПНПЭЙ DocumentBuilder УПУФПЙФ Ч ХРТБЧМЕОЙЙ ТБЪМЙЮОЩНЙ ХУФБОПЧЛБНЙ РБТУЕТБ, УПЪДБЧБЕНПЗП РТЙ РПНПЭЙ DocumentBuilderFactory . оБРТЙНЕТ, РБТУЕТ НПЦЕФ ВЩФШ ХУФБОПЧМЕО ОБ РТПЧЕТЛХ РТБЧЙМШОПУФЙ ДПЛХНЕОФБ:

Java-ТЕБМЙЪБГЙС DOM хТПЧОС 2 ПВЕУРЕЮЙЧБЕФ ХРТБЧМЕОЙЕ РБТБНЕФТБНЙ РБТУЕТБ ЮЕТЕЪ УМЕДХАЭЙЕ НЕФПДЩ:

  • setCoalescing() : пРТЕДЕМСЕФ, РТЕЧТБЭБЕФ МЙ РБТУЕТ ХЪМЩ CDATA Ч ФЕЛУФ Й УПЕДЙОСЕФ МЙ ЙИ У ПЛТХЦБАЭЙНЙ ФЕЛУФПЧЩНЙ ХЪМБНЙ (ЕУМЙ ЧПЪНПЦОП). ъОБЮЕОЙЕ РП ХНПМЮБОЙА — false .
  • setExpandEntityReferences() : РТЕДЕМСЕФ, ТБУЫЙТСАФУС МЙ ЧОЕЫОЙЕ УУЩМЛЙ ОБ УХЭОПУФЙ. еУМЙ true , ЧОЕЫОЙЕ ДБООЩЕ ЧУФБЧМСАФУС Ч ДПЛХНЕОФ. ъОБЮЕОЙЕ РП ХНПМЮБОЙА — true . (рТЙЕНЩ ТБВПФЩ У ЧОЕЫОЙНЙ УХЭОПУФСНЙ УН. Ч тЕУХТУЩ .)
  • setIgnoringComments() : пРТЕДЕМСЕФ, ЙЗОПТЙТХАФУС МЙ ЛПННЕОФБТЙЙ Ч ЖБКМЕ. ъОБЮЕОЙЕ РП ХНПМЮБОЙА — false .
  • setIgnoringElementContentWhitespace() : пРТЕДЕМСЕФ, ЙЗОПТЙТХАФУС МЙ РТПРХУЛЙ НЕЦДХ ЬМЕНЕОФБНЙ (БОБМПЗЙЮОП ФПНХ, ЛБЛ ВТБХЪЕТ ЙОФЕТРТЕФЙТХЕФ HTML). ъОБЮЕОЙЕ РП ХНПМЮБОЙА — false .
  • setNamespaceAware() : пРТЕДЕМСЕФ, ПВТБЭБЕФ МЙ РБТУЕТ ЧОЙНБОЙЕ ОБ ЙОЖПТНБГЙА РТПУФТБОУФЧБ ЙНЕО. ъОБЮЕОЙЕ РП ХНПМЮБОЙА — false .
  • setValidating() : рП ХНПМЮБОЙА РБТУЕТ ОЕ РТПЧЕТСЕФ РТБЧЙМШОПУФШ ДПЛХНЕОФПЧ. хУФБОПЧЙФЕ ЪДЕУШ true ДМС РТПЧЕТЛЙ РТБЧЙМШОПУФЙ.

йУЛМАЮЕОЙС РБТУЕТБ

рТЙ ЧУЕИ ТБЪОППВТБЪОЩИ ЧПЪНПЦОПУФСИ Ч УПЪДБОЙЙ РБТУЕТБ НОПЗЙЕ ЧЕЭЙ НПЗХФ ВЩФШ ОЕРТБЧЙМШОП УДЕМБОЩ. лБЛ РПЛБЪБОП Ч РТЙНЕТЕ, РТЙМПЦЕОЙЕ УЧПДЙФ ЧУЕ ЬФП Ч ЕДЙОУФЧЕООПЕ ТПДПЧПЕ Exception , ЛПФПТПЕ ОЕ НПЦЕФ ВЩФШ ДПУФБФПЮОП РПМЕЪОЩН Ч УНЩУМЕ ПФМБДЛЙ.

юФПВЩ МХЮЫЕ ДЙБЗОПУФЙТПЧБФШ РТПВМЕНЩ, ЧЩ НПЦЕФЕ ЧЩМБЧМЙЧБФШ УРЕГЙЖЙЮЕУЛЙЕ ЙУЛМАЮЕОЙС, ПФОПУСЭЙЕУС Л ТБЪМЙЮОЩН БУРЕЛФБН УПЪДБОЙС Й ЙУРПМШЪПЧБОЙС РБТУЕТБ:

лПЗДБ РБТУЕТ УПЪДБМ ДПЛХНЕОФ, РТЙМПЦЕОЙЕ НПЦЕФ РТПИПДЙФШ ЮЕТЕЪ ОЕЗП ДМС ПВТБВПФЛЙ ДБООЩИ.

тБЪДЕМ 6. рТПИПЦДЕОЙЕ РП ДПЛХНЕОФХ

рПМХЮЕОЙЕ ЛПТОЕЧПЗП ЬМЕНЕОФБ

еУМЙ ДПЛХНЕОФ ТБЪПВТБО Й УПЪДБО Document , РТЙМПЦЕОЙЕ НПЦЕФ ДЧЙЗБФШУС РП УФТХЛФХТЕ ДМС ПВЪПТБ, РПЙУЛБ Й ПФПВТБЦЕОЙС ЙОЖПТНБГЙЙ. ьФБ ОБЧЙЗБГЙС СЧМСЕФУС ПУОПЧПК ДМС НОПЗЙИ ПРЕТБГЙК, ЧЩРПМОСЕНЩИ ОБ ПВЯЕЛФЕ Document .

рТПИПЦДЕОЙЕ ЮЕТЕЪ ДПЛХНЕОФ ОБЮЙОБЕФУС У ЛПТОЕЧПЗП ЬМЕНЕОФБ. рТБЧЙМШОП ЖПТНБФЙТПЧБООЩК ДПЛХНЕОФ ЙНЕЕФ ФПМШЛП ПДЙО ЛПТОЕЧПК ЬМЕНЕОФ, ОБЪЩЧБЕНЩК ФБЛЦЕ DocumentElement . уОБЮБМБ РТЙМПЦЕОЙЕ ЧЩВЙТБЕФ ЬФПФ ЬМЕНЕОФ.

лПНРЙМСГЙС Й ЧЩРПМОЕОЙЕ РТЙМПЦЕОЙС ЧЩЧЕДЕФ ЙНС ЛПТОЕЧПЗП ЬМЕНЕОФБ, orders .

рПМХЮЕОЙЕ РПФПНЛБ ЬМЕНЕОФБ

еУМЙ РТЙМПЦЕОЙЕ ПРТЕДЕМЙМП ЛПТОЕЧПК ЬМЕНЕОФ, ПОП ЧЩВЙТБЕФ УРЙУПЛ РПФПНЛПЧ ЛПТОЕЧПЗП ЬМЕНЕОФБ ЛБЛ NodeList . лМБУУ NodeList СЧМСЕФУС УЕТЙЕК ЛПНРПОЕОФПЧ, ЛПФПТХА РТЙМПЦЕОЙЕ НПЦЕФ РЕТЕВЙТБФШ. ч ДБООПН РТЙНЕТЕ ДМС ЛТБФЛПУФЙ РТЙМПЦЕОЙЕ РПМХЮБЕФ ДПЮЕТОЙЕ ХЪМЩ Й РТПЧЕТСЕФ ЧЩВПТЛХ, РПЛБЪЩЧБС, УЛПМШЛП ЬМЕНЕОФПЧ РПСЧМСЕФУС Ч ТЕЪХМШФЙТХАЭЕН NodeList .

ъБНЕФШФЕ, ЮФП ДПЛХНЕОФ ЙНЕЕФ ФПМШЛП ДЧБ ЬМЕНЕОФБ, ОП NodeList УПДЕТЦЙФ РСФШ РПФПНЛПЧ, ЧЛМАЮБС ФТЙ ФЕЛУФПЧЩИ ХЪМБ, ЛПФПТЩЕ УПДЕТЦБФ РЕТЕЧПДЩ УФТПЛ.

йУРПМШЪПЧБОЙЕ getFirstChild() Й getNextSibling()

пФОПЫЕОЙС РТЕДПЛ-РПФПНПЛ Й ВТБФУЛЙЕ ПФОПЫЕОЙС РТЕДМБЗБАФ БМШФЕТОБФЙЧОЩК УРПУПВ ДМС РЕТЕВПТБ ЧУЕИ РПФПНЛПЧ ДБООПЗП ХЪМБ, ЛПФПТЩК НПЦЕФ ВЩФШ ВПМЕЕ РПДИПДСЭЙН Ч ОЕЛПФПТЩИ УЙФХБГЙСИ, ОБРТЙНЕТ, ЛПЗДБ ДМС РПОЙНБОЙС ДБООЩИ ЧБЦОЩ ПФОПЫЕОЙС Й РПТСДПЛ, Ч ЛПФПТПН РПСЧМСАФУС РПФПНЛЙ.

оБ ыБЗЕ 3, ГЙЛМ for ОБЮЙОБЕФУС У РЕТЧПЗП РПФПНЛБ ЛПТОС. рТЙМПЦЕОЙЕ РЕТЕВЙТБЕФ «ВТБФШЕЧ» РЕТЧПЗП РПФПНЛБ, РПЛБ ЧУЕ ПОЙ ОЕ ВХДХФ ПВТБВПФБОЩ. рТЙ ЧЩРПМОЕОЙЙ ЛБЦДПК ЙФЕТБГЙЙ ГЙЛМБ РТЙМПЦЕОЙЕ ЧЩВЙТБЕФ ПВЯЕЛФ Node , ЧЩЧПДЙФ ЕЗП ЙНС Й ЪОБЮЕОЙЕ. ъБНЕФШФЕ, ЮФП Ч ЮЙУМП РСФЙ РПФПНЛПЧ orders ЧИПДСФ ЬМЕНЕОФЩ order Й ФТЙ ФЕЛУФПЧЩИ ХЪМБ. ъБНЕФШФЕ ФБЛЦЕ, ЮФП ЬМЕНЕОФЩ ЙНЕАФ ЪОБЮЕОЙЕ null , Б ОЕ ФЕЛУФ, ЛБЛ ПЦЙДБМПУШ. ьФЙ ФЕЛУФПЧЩЕ ХЪМЩ СЧМСАФУС РПФПНЛБНЙ ЬМЕНЕОФПЧ, ЛПФПТЩЕ ЙНЕАФ Ч ЛБЮЕУФЧЕ УЧПЙИ ЪОБЮЕОЙК ТЕБМШОПЕ УПДЕТЦЙНПЕ.

тЕЛХТУЙС ЮЕТЕЪ НОПЗЙЕ ХТПЧОЙ РПФПНЛПЧ

лПД Ч РПДТБЪДЕМЕ йУРПМШЪПЧБОЙЕ getFirstChild() Й getNextSibling() РПЛБЪЩЧБЕФ РПФПНЛБ РЕТЧПЗП ХТПЧОС, ОП ЬФП ФТХДОП ДМС ЧУЕЗП ДПЛХНЕОФБ. юФПВЩ ХЧЙДЕФШ ЧУЕ ЬМЕНЕОФЩ, ЖХОЛГЙПОБМШОПУФШ РТЕДЩДХЭЕЗП РТЙНЕТБ ДПМЦОБ ВЩФШ ПЖПТНМЕОБ Ч НЕФПД Й ДПМЦОБ ЧЩЪЩЧБФШУС ТЕЛХТУЙЧОП.

рТЙМПЦЕОЙЕ ОБЮЙОБЕФ У ЛПТОЕЧПЗП ЬМЕНЕОФБ Й РЕЮБФБЕФ ЙНС Й ЪОБЮЕОЙЕ ОБ ЬЛТБОЕ. ъБФЕН РТЙМПЦЕОЙЕ РТПИПДЙФ ЮЕТЕЪ ЛБЦДЩК ЕЗП РПФПНПЛ ФБЛ ЦЕ, ЛБЛ Й ТБОШЫЕ. оП ДМС ЛБЦДПЗП РПФПНЛБ РТЙМПЦЕОЙЕ ФБЛЦЕ РТПИПДЙФ ЮЕТЕЪ ЛБЦДЩК ЕЗП РПФПНПЛ, РТПЧЕТСС ЧУЕИ «ДЕФЕК» Й «ЧОХЛПЧ» ЛПТОЕЧПЗП ЬМЕНЕОФБ.

чЛМАЮЕОЙЕ БФТЙВХФПЧ

нЕФПД stepThrough() , ЛБЛ ПО ВЩМ ОБРЙУБО ДП УЙИ РПТ, НПЦЕФ РТПИПДЙФШ ЮЕТЕЪ ВПМШЫЙОУФЧП ФЙРПЧ ХЪМПЧ, ОП Ч ОЕН РПМОПУФША ПФУХФУФЧХАФ БФТЙВХФЩ, РПУЛПМШЛХ ПОЙ ОЕ СЧМСАФУС РПФПНЛБНЙ ОЙЛБЛЙИ ХЪМПЧ. юФПВЩ РПЛБЪЩЧБФШ БФТЙВХФЩ, НПДЙЖЙГЙТХЕН НЕФПД stepThrough() ДМС РТПЧЕТЛЙ ЬМЕНЕОФОЩИ ХЪМПЧ ОБ ОБМЙЮЙЕ БФТЙВХФПЧ.

рТЙЧЕДЕООЩК ОЙЦЕ НПДЙЖЙГЙТПЧБООЩК ЛПД РТПЧЕТСЕФ ЛБЦДЩК ХЪЕМ ОБ ФП, СЧМСЕФУС МЙ ПО ЬМЕНЕОФПН, РХФЕН УТБЧОЕОЙС ЕЗП nodeType У ЛПОУФБОФПК ELEMENT_NODE . пВЯЕЛФ Node ЙНЕЕФ Ч УЧПЕН УПУФБЧЕ ЛПОУФБОФЩ, ЛПФПТЩЕ РТЕДУФБЧМСАФ ЛБЦДЩК ФЙР ХЪМБ, ФБЛЙЕ, ЛБЛ ELEMENT_NODE ЙМЙ ATTRIBUTE_NODE . еУМЙ nodeType УППФЧЕФУФЧХЕФ ELEMENT_NODE , ПО СЧМСЕФУС ЬМЕНЕОФПН.


дМС ЛБЦДПЗП ОБКДЕООПЗП ЙН ЬМЕНЕОФБ РТЙМПЦЕОЙЕ УПЪДБЕФ ПВЯЕЛФ NamedNodeMap , УПДЕТЦБЭЙК ЧУЕ БФТЙВХФЩ ЬМЕНЕОФБ. рТЙМПЦЕОЙЕ НПЦЕФ РЕТЕВЙТБФШ NamedNodeMap , РЕЮБФБС ЙНС Й ЪОБЮЕОЙЕ ЛБЦДПЗП БФТЙВХФБ, ФБЛ ЦЕ, ЛБЛ ПОП РЕТЕВЙТБМП NodeList .

тБЪДЕМ 7. тЕДБЛФЙТПЧБОЙЕ ДПЛХНЕОФБ

йЪНЕОЕОЙЕ ЪОБЮЕОЙС Ч ХЪМЕ

рТПУНПФТ УПДЕТЦЙНПЗП XML-ДПЛХНЕОФ РПМЕЪЕО, ОП ЛПЗДБ ЧЩ ЙНЕЕФЕ ДЕМП У РПМОПЖХОЛГЙПОБМШОЩН РТЙМПЦЕОЙЕН, ЧБН НПЦЕФ РПОБДПВЙФШУС ЙЪНЕОСФШ ДБООЩЕ, ДПВБЧМСС, РЕТЕНЕЭБС ЙМЙ ХДБМСС ЙОЖПТНБГЙА. чПЪНПЦОПУФШ ТЕДБЛФЙТПЧБОЙС ДБООЩИ ФБЛЦЕ ЧБЦОБ РТЙ УПЪДБОЙЙ ОПЧЩИ XML-ДПЛХНЕОФПЧ. рТПУФЕКЫЙН ЙЪ ФБЛЙИ ЙЪНЕОЕОЙК СЧМСЕФУС ЙЪНЕОЕОЙЕ ФЕЛУФПЧПЗП УПДЕТЦБОЙС ЬМЕНЕОФБ.

оБЫЕК ГЕМША СЧМСЕФУС ЙЪНЕОЙФШ ЪОБЮЕОЙЕ ФЕЛУФПЧПЗП ХЪМБ ЬМЕНЕОФБ, Ч ДБООПН УМХЮБЕ ХУФБОПЧЛПК status ДМС ЛБЦДПЗП order Ч «processed», Б ЪБФЕН ЧЩЧЕУФЙ ОПЧЩЕ ЪОБЮЕОЙС ОБ ЬЛТБО.

нЕФПД changeOrder() ЧЩЪЩЧБЕФУС У РЕТЕДБЮЕК ЕНХ ОБЮБМШОПЗП ХЪМБ ( root ) Ч ЛБЮЕУФЧЕ РБТБНЕФТБ, Б ФБЛЦЕ ЙНЕОЙ ЙЪНЕОСЕНПЗП ЬМЕНЕОФБ Й ЙЪНЕОЕООПЗП ЪОБЮЕОЙС.

changeOrder() УОБЮБМБ РТПЧЕТСЕФ ЙНС ХЪМБ, ЮФПВЩ ХЧЙДЕФШ, ФПФ МЙ ЬМЕНЕОФ, ЛПФПТЩК ТЕДБЛФЙТХЕФУС. еУМЙ ЬФП ФБЛ, РТЙМПЦЕОЙА ОХЦОП ЙЪНЕОЙФШ ЪОБЮЕОЙЕ ОЕ ЬФПЗП ХЪМБ, Б ЕЗП РЕТЧПЗП РПФПНЛБ, РПУЛПМШЛХ ЬФПФ РЕТЧЩК РПФПНПЛ СЧМСЕФУС ФЕЛУФПЧЩН ХЪМПН, ЛПФПТЩК ОБ УБНПН ДЕМЕ УПДЕТЦЙФ УПДЕТЦЙНПЕ ЬМЕНЕОФБ.

ч РТПФЙЧОПН УМХЮБЕ РТЙМПЦЕОЙЕ РТПЧЕТСЕФ ЛБЦДЩК РПФПНПЛ ФБЛ ЦЕ, ЛБЛ ЬФП ДЕМБМПУШ РТЙ РТПИПЦДЕОЙЙ РП ДПЛХНЕОФХ Ч РЕТЧЩК ТБЪ.

лПЗДБ ЙЪНЕОЕОЙС ЧЩРПМОЕОЩ, ЪОБЮЕОЙЕ РТПЧЕТСАФУС РТЙ РПНПЭЙ getElementsByTagName() . ьФПФ НЕФПД ЧПЪЧТБЭБЕФ УРЙУПЛ ЧУЕИ ДПЮЕТОЙИ ЬМЕНЕОФПЧ У ЪБДБООЩН ЙНЕОЕН, ФБЛЙН, ЛБЛ status . рТЙМПЦЕОЙЕ НПЦЕФ ЪБФЕН РТПЧЕТЙФШ ЪОБЮЕОЙС Ч УРЙУЛЕ, ЮФПВЩ ХВЕДЙФШУС, ЮФП НЕФПД changeOrder() ТБВПФБЕФ.

ъБНЕФШФЕ, ЮФП РТЙМПЦЕОЙЕ ЧЩВЙТБЕФ ХЪМЩ status ДБЦЕ, ОЕУНПФТС ОБ ФП, ЮФП ПОЙ СЧМСАФУС «ЧОХЛБНЙ» ЛПТОЕЧПЗП ЬМЕНЕОФБ, Б ОЕ ОЕРПУТЕДУФЧЕООЩНЙ ЕЗП «ДЕФШНЙ». getElementsByTagName() РТПИПДЙФ ЮЕТЕЪ ДПЛХНЕОФ Й ОБИПДЙФ ЧУЕ ЬМЕНЕОФЩ У ПРТЕДЕМЕООЩН ЙНЕОЕН.

дПВБЧМЕОЙЕ ХЪМПЧ: РПДЗПФПЧЛБ ДБООЩИ

йОПЗДБ ОЕПВИПДЙНП ОЕ ЙЪНЕОЙФШ УХЭЕУФЧХАЭЙК ХЪЕМ, Б ДПВБЧЙФШ ХЪЕМ, Й Х ЧБУ ЕУФШ ОЕУЛПМШЛП УРПУПВПЧ УДЕМБФШ ЬФП. ч ОБЫЕН РТЙНЕТЕ РТЙМПЦЕОЙЕ ЧЩЮЙУМСЕФ ПВЭХА УФПЙНПУФШ ЛБЦДПЗП ЪБЛБЪБ Й ДПВБЧМСЕФ Ч order ЬМЕНЕОФ total . пОП РПМХЮБЕФ ПВЭХА УФПЙНПУФШ, ЧЩВЙТБС ЛБЦДЩК ЪБЛБЪ Й РТПИПДС ЮЕТЕЪ ЧУЕ ЕЗП УПУФБЧМСАЭЙЕ, ЮФПВЩ РПМХЮЙФШ УФПЙНПУФШ УПУФБЧМСАЭЕК, Б ЪБФЕН ЙФПЗПЧХА УФПЙНПУФШ ЙИ ЧУЕИ. ъБФЕН РТЙМПЦЕОЙЕ ДПВБЧМСЕФ ОПЧЩК ЬМЕНЕОФ Ч ЪБЛБЪ (УН. ЛПД ОЙЦЕ).

уОБЮБМБ РТЙМПЦЕОЙЕ ЧЩВЙТБЕФ ЬМЕНЕОФЩ order ФБЛ ЦЕ, ЛБЛ ПОП ЧЩВЙТБМП ЬМЕНЕОФЩ status . ъБФЕН РЕТЕВЙТБЕФ ЛБЦДЩК ЙЪ ЬФЙИ ЬМЕНЕОФПЧ.

дМС ЛБЦДПЗП ЙЪ ЬФЙИ order РТЙМПЦЕОЙА ОХЦЕО NodeList ЙЪ ЕЗП УПУФБЧМСАЭЙИ item , ФБЛ ЮФП РТЙМПЦЕОЙЕ ДПМЦОП УОБЮБМБ РТЕПВТБЪПЧБФШ ХЪЕМ ( Node ) order Ч Element , ЮФПВЩ ЙУРПМШЪПЧБФШ getElementsByTagName() .

рТЙМПЦЕОЙЕ ЪБФЕН НПЦЕФ РЕТЕВТБФШ УПУФБЧМСАЭЙЕ item ДМС ЧЩВТБООПЗП order . лБЦДБС ЙЪ ОЙИ РТЕПВТБЪХЕФУС Ч Element , ФБЛ ЮФП ЙЪ ОЕЗП НПЦОП ЧЩВТБФШ РП ЙНЕОЙ price Й qty . рТЙМПЦЕОЙЕ ДЕМБЕФ ЬФП РТЙ РПНПЭЙ НЕФПДБ getElementsByTagName() , Й РПУЛПМШЛХ ЙИ ЧУЕЗП РП ПДОПНХ Ч ЛБЦДПН item, ПОП НПЦЕФ РТСНП ВТБФШ item(0) , РЕТЧХА УПУФБЧМСАЭХА ТЕЪХМШФЙТХАЭЕЗП NodeList . ьФПФ РЕТЧЩК ЬМЕНЕОФ РТЕДУФБЧМСЕФ ЬМЕНЕОФ price (ЙМЙ qty ). йЪ ОЕЗП ЙЪЧМЕЛБЕФУС ЪОБЮЕОЙЕ ФЕЛУФПЧПЗП ХЪМБ.

ъОБЮЕОЙЕ ФЕЛУФПЧПЗП ХЪМБ ЙНЕЕФ ФЙР String , РТЙМПЦЕОЙЕ ЪБФЕН РТЕПВТБЪХЕФ ЕЗП Ч double , ЮФПВЩ УДЕМБФШ ЧПЪНПЦОЩН ЧЩЮЙУМЕОЙЕ.

лПЗДБ РТЙМПЦЕОЙЕ ЪБЛБОЮЙЧБЕФ РТПЧЕТЛХ ЧУЕИ УПУФБЧМСАЭЙИ ДМС ЛБЦДПЗП ЪБЛБЪБ, total ФЙРБ double РТЕДУФБЧМСЕФ ЙФПЗПЧПЕ ЪОБЮЕОЙЕ. ъБФЕН total РТЕПВТБЪХЕФУС Ч String , ФБЛ ЮФП ПОП НПЦЕФ ЙУРПМШЪПЧБФШУС ЛБЛ УПДЕТЦЙНПЕ ОПЧПЗП ЬМЕНЕОФБ, , ЛПФПТЩК Ч ЛПОЕЮОПН УЮЕФЕ РТЙУПЕДЙОСЕФУС Л order .

дПВБЧМЕОЙЕ ХЪМПЧ: ДПВБЧМЕОЙЕ ХЪМПЧ Ч ДПЛХНЕОФ

чЩ НПЦЕФЕ УПЪДБФШ ОПЧЩК Node НОПЗЙНЙ УРПУПВБНЙ, Й ЬФПФ РТЙНЕТ РТЙНЕОСЕФ ОЕУЛПМШЛП ЙЪ ОЙИ. чП-РЕТЧЩИ, ПВЯЕЛФ Document НПЦЕФ УПЪДБЧБФШ ОПЧЩК ФЕЛУФПЧЩК ХЪЕМ УП ЪОБЮЕОЙЕН totalString . оПЧЩК Node ФЕРЕТШ УХЭЕУФЧХЕФ, ОП ЕЭЕ ОЙЛХДБ ОЕ РТЙУПЕДЙОЕО Л Document . оПЧЩК ЬМЕНЕОФ total УПЪДБЕФУС БОБМПЗЙЮОП, Й ПО ФБЛЦЕ РПОБЮБМХ УЧПВПДОЩК.

дТХЗПК УРПУПВ ДПВБЧМЕОЙЕ ХЪМБ — РТЙНЕОЕОЙЕ appendChild() , ЛБЛ РПЛБЪБОП ЪДЕУШ ДМС ОПЧПЗП ЬМЕНЕОФБ total .

оБЛПОЕГ, РТЙМПЦЕОЙЕ НПЦЕФ ЙУРПМШЪПЧБФШ insertBefore() ДМС ДПВБЧМЕОЙС ОПЧПЗП ЬМЕНЕОФБ Document , ХЛБЪЩЧБС ОПЧЩК Node Й РТЕДЫЕУФЧХАЭЙК Node .

рТПИПЦДЕОЙЕ ЮЕТЕЪ ДПЛХНЕОФ РТПЧЕТСЕФ ЙЪНЕОЕОЙС.

хДБМЕОЙЕ ХЪМБ

чНЕУФП ФПЗП, ЮФПВЩ ЪБНЕОСФШ ЬМЕНЕОФ, РТЙМПЦЕОЙЕ НПЦЕФ ХДБМЙФШ ЕЗП УПЧУЕН. ч ДБООПН РТЙНЕТЕ РТЙМПЦЕОЙЕ РТПЧЕТСЕФ, ЙНЕЕФУС МЙ УПУФБЧМСАЭБС ОБ УЛМБДЕ. еУМЙ ОЕФ, ПОП ХДБМСЕФ УПУФБЧМСАЭХА ЙЪ ЪБЛБЪБ ЧНЕУФП ФПЗП, ЮФПВЩ РТЙВБЧМСФШ ЕЕ Л ЙФПЗХ.

рЕТЕД ДПВБЧМЕОЙЕН УФПЙНПУФЙ УПУФБЧМСАЭЕК Л ЙФПЗХ РТЙМПЦЕОЙЕ РТПЧЕТСЕФ ЪОБЮЕОЙЕ БФТЙВХФБ instock . еУМЙ ПОП N , ФП ЧНЕУФП ДПВБЧМЕОЙС Л ЙФПЗХ УПУФБЧМСАЭБС РПМОПУФША ХДБМСЕФУС. юФПВЩ ЬФП УДЕМБФШ, РТЙМПЦЕОЙЕ РТЙНЕОСЕФ НЕФПД removeChild() , ОП УОБЮБМБ ПРТЕДЕМСЕФ РТЕДЛБ ЬФПЗП orderItem РТЙ РПНПЭЙ getParentNode() . code>Node ХДБМСЕФУС ЙЪ ДПЛХНЕОФБ, ОП НЕФПД ФБЛЦЕ ЧПЪЧТБЭБЕФ ЕЗП, ФБЛ ЮФП, РТЙ ЦЕМБОЙЙ, ПО НПЦЕФ ВЩФШ РЕТЕНЕЭЕО.

ъБНЕОБ ХЪМБ

лПОЕЮОП, ОЕ ЙНЕЕФ УНЩУМБ ХДБМСФШ ЛПНРПОЕОФХ ЪБЛБЪБ, ЕУМЙ ПОБ ОЕ ЧЩРПМОЕОБ. чНЕУФП ЬФПЗП РТЙМПЦЕОЙЕ ЪБНЕОСЕФ ЕЕ ЛПНРПОЕОФПК backordered .

чНЕУФП removeChild() РТПУФП ЙУРПМШЪХКФЕ replaceChild() . ъБНЕФШФЕ, ЮФП Ч ДБООПН УМХЮБЕ НЕФПД ФБЛЦЕ ЧПЪЧТБЭБЕФ УФБТЩК ХЪЕМ, ФБЛ ЮФП ПО НПЦЕФ ВЩФШ РЕТЕОЕУЕО, ЕУМЙ ЬФП ОЕПВИПДЙНП, ЧПЪНПЦОП, Ч ОПЧЩК Document , РЕТЕЮЙУМСАЭЙК ОЕЧЩРПМОЕООЩЕ ЛПНРПОЕОФЩ.

ъБНЕФШФЕ, ЮФП РПУЛПМШЛХ ОЙЛБЛПЕ УПДЕТЦЙНПЕ ОЕ ВЩМП ДПВБЧМЕОП Ч ЬМЕНЕОФ, ЬФПФ ЬМЕНЕОФ СЧМСЕФУС РХУФЩН. рХУФПК ЬМЕНЕОФ ОЕ ЙНЕЕФ УПДЕТЦЙНПЗП Й НПЦЕФ ВЩФШ ЪБРЙУБО Ч УПЛТБЭЕООПН ЧЙДЕ:

уПЪДБОЙЕ Й ХУФБОПЧЛБ БФТЙВХФПЧ

лПОЕЮОП, ЮФП ИПТПЫЕЗП Ч ЬМЕНЕОФЕ backordered , ЕУМЙ ОЕ ЧЙДОП, ЛБЛХА ЛПНРПОЕОФХ ПО РТЕДУФБЧМСЕФ? пДОЙН ЙЪ УРПУПВПЧ ЙУРТБЧЙФШ ОЕДПУФБФПЛ ЙОЖПТНБГЙЙ СЧМСЕФУС ДПВБЧМЕОЙЕ БФТЙВХФПЧ Ч ЬМЕНЕОФ.

уОБЮБМБ РТЙМПЦЕОЙЕ УПЪДБЕФ БФТЙВХФ itemid . ъБФЕН ПОП ПРТЕДЕМСЕФ ЪОБЮЕОЙЕ itemid ЙЪ ЙУИПДОПЗП ЬМЕНЕОФБ item , Б ЪБФЕН ХУФБОБЧМЙЧБЕФ ЪОБЮЕОЙЕ Ч УБН БФТЙВХФ. оБЛПОЕГ, ПОП ДПВБЧМСЕФ ЬМЕНЕОФ Ч ДПЛХНЕОФ, ФБЛ ЦЕ, ЛБЛ Й ТБОШЫЕ.

чБЦОП ЪБНЕФЙФШ, ЮФП setAttribute() УПЪДБЕФ ХЪЕМ БФТЙВХФБ, ЕУМЙ БФТЙВХФ У ФБЛЙН ЙНЕОЕН ОЕ УХЭЕУФЧХЕФ, ФБЛ ЮФП Ч ЬФПН УМХЮБЕ РТЙМПЦЕОЙЕ НПЦЕФ УПЧУЕН РТПРХУФЙФШ createAttribute() .

хДБМЕОЙЕ БФТЙВХФБ

рТЙМПЦЕОЙЕ НПЦЕФ ФБЛЦЕ ХДБМЙФШ БФТЙВХФ. оБРТЙНЕТ, НПЦЕФ ВЩФШ ОЕЦЕМБФЕМШОЩН РПЛБЪЩЧБФШ ОБ ЧЩИПДЕ ЙОЖПТНБГЙА П ЛТЕДЙФЕ РПЛХРБФЕМС, ФБЛ ЮФП РТЙМПЦЕОЙЕ НПЦЕФ ЧТЕНЕООП ХДБМЙФШ ЕЕ ЙЪ ДПЛХНЕОФБ.

хДБМЕОЙЕ ЙОЖПТНБГЙЙ ЧЩРПМОСЕФУС СЧОЩН ПВТБЪПН РТЙ РПНПЭЙ removeAttribute() ДМС ХДБМЕОЙС ДБООЩИ.

пДОБЛП УМЕДХАЭЙК ЫБЗ ЙУРПМШЪХЕФ ЙОЖПТНБГЙА П ЛТЕДЙФЕ, ФБЛ ЮФП ЧБН УМЕДХЕФ ХДБМЙФШ РПУМЕДОЙЕ ЙЪНЕОЕОЙС РТЕЦДЕ, ЮЕН ДЧЙЗБФШУС ДБМШЫЕ.

тБЪДЕМ 8. чЩЧПД ДПЛХНЕОФБ

рПДЗПФПЧЛБ ДБООЩИ

нЩ Ч ОБЫЕН ХЮЕВОЙЛЕ ТБУУНПФТЕМЙ, ЛБЛ ЧЩВЙТБФШ, ТБВПФБФШ Й НБОЙРХМЙТПЧБФШ У XML-ДБООЩНЙ. дМС ЪБЧЕТЫЕОЙС ГЙЛМБ ЧЩ ДПМЦОЩ ФБЛЦЕ ХНЕФШ ЧЩЧПДЙФШ XML.

ч УМХЮБЕ ЬФПЗП ХЮЕВОЙЛБ ГЕМЕЧЩН ЧЩЧПДПН СЧМСЕФУС ЖБКМ, Ч ЛПФПТПН РТПУФП РЕТЕЮЙУМСАФУС ЧУЕ ЪБЛБЪЩ РП НЕТЕ ФПЗП, ЛБЛ ПОЙ РПУФХРБАФ ЙМЙ ПФЧЕТЗБАФУС ОБ ПУОПЧЕ ЛТЕДЙФБ РПЛХРБФЕМС Й customerid .

уОБЮБМБ РТЙМПЦЕОЙЕ УПЪДБЕФ ПВЯЕЛФ Document ДМС ЧЩЧПДБ. дМС ХДПВУФЧБ ФПФ ЦЕ УБНЩК DocumentBuilder , ЛПФПТЩК УПЪДБЧБМ ЙУИПДОЩК Document , НПЦЕФ УПЪДБЧБФШ Й ОПЧЩК.

рПУМЕ ПВТБВПФЛЙ orders.xml РТЙМПЦЕОЙЕ УПЪДБЕФ ОПЧЩК ЬМЕНЕОФ, processedOrders , ЛПФПТЩК Ч ЛПОЕЮОПН УЮЕФЕ УФБОЕФ ЛПТОЕЧЩН ЬМЕНЕОФПН ОПЧПЗП ДПЛХНЕОФБ. ъБФЕН ПОП РТПИПДЙФ ЮЕТЕЪ ЛБЦДЩК ЪБЛБЪ. дМС ЛБЦДПЗП ЪБЛБЪБ ПОП ЧЩДЕМСЕФ ЙОЖПТНБГЙА total Й limit .

дБМЕЕ РТЙМПЦЕОЙЕ УПЪДБЕФ ОПЧЩЕ ЬМЕНЕОФЩ ДМС ЪБЛБЪБ: order , status , customerid Й amount . пОП ЪБРПМОСЕФ status ОБ ПУОПЧЕ ФПЗП, РТЕЧЩЫБЕФ МЙ ЙФПЗ ЛТЕДЙФ РПЛХРБФЕМС, Й Ч УППФЧЕФУФЧЙЙ У ЬФЙН ЪБРПМОСЕФ ПУФБМШОПЕ.

рПУМЕ ФПЗП, ЛБЛ РТЙМПЦЕОЙЕ УПЪДБМП ЬМЕНЕОФЩ, ПОП ДПМЦОП УПВТБФШ ЙИ ЧНЕУФЕ. уОБЮБМБ ПОП ДПВБЧМСЕФ УПУФПСОЙЕ, ЙОЖПТНБГЙА П РПЛХРБФЕМЕ Й ЙФПЗ Ч ОПЧЩК ЬМЕНЕОФ order . ъБФЕН ПОП ДПВБЧМСЕФ ОПЧЩК order Ч ЬМЕНЕОФ newRoot .

рПЛБ ЧУЕ ЬФП РТПЙУИПДЙФ, ЬМЕНЕОФ newRoot ОБ УБНПН ДЕМЕ ОЕ РТЙУПЕДЙОЕО Л ТПДЙФЕМШУЛПНХ ХЪМХ. лПЗДБ РТЙМПЦЕОЙЕ ЪБЧЕТЫЙФ ПВТБВПФЛХ ЧУЕИ ЪБЛБЪПЧ, newRoot РТЙУПЕДЙОСЕФУС Л ОПЧПНХ ДПЛХНЕОФХ.

оБЛПОЕГ, РТЙМПЦЕОЙЕ ЧЩЧПДЙФ ДБООЩЕ, РТЕПВТБЪПЧЩЧБС newRoot Ч String Й РТПУФП РПУЩМБС ЕЗП Ч System.out .


уПЪДБОЙЕ XML-ЖБКМБ

фЕРЕТШ ОБН СУОП, ЛБЛ РТЙМПЦЕОЙЕ ДПМЦОП УПЪДБЧБФШ ОПЧХА ЙОЖПТНБГЙА Й ЧЩЧПДЙФШ ЕЕ Ч ЖБКМ.

фБ ЦЕ МПЗЙЛБ ЙУРПМШЪХЕФУС ДМС ДБООЩИ, ОП ЧНЕУФП ФПЗП, ЮФПВЩ ЧЩЧПДЙФШ ОБ ЬЛТБО, РТЙМПЦЕОЙЕ РПУЩМБЕФ ЙИ Ч ЖБКМ.

чБЦОПЕ ПВУФПСФЕМШУФЧП, ЛПФПТПЕ УФПЙФ ЪДЕУШ ПФНЕФЙФШ, УПУФПЙФ Ч ФПН, ЮФП РПУЛПМШЛХ XML-ДБООЩЕ СЧМСАФУС РТПУФП ФЕЛУФПН, ПОЙ НПЗХФ ВЩФШ ЖПТНБФЙТПЧБОЩ МАВЩН УРПУПВПН. оБРТЙНЕТ, ЧЩ НПЦЕФЕ УПЪДБФШ ТБЪОПЧЙДОПУФШ stepThroughAll() ЛПФПТБС ВХДЕФ УПЪДБЧБФШ ЧЕТУЙА У ПФУФХРБНЙ, ЛТБУЙЧХА ДМС РЕЮБФЙ. фПМШЛП РПНОЙФЕ, ЮФП ЬФП ВХДЕФ УПЪДБЧБФШ МЙЫОЙЕ ХЪМЩ РТПРХУЛПЧ (ФЕЛУФПЧЩЕ).

фПЦДЕУФЧЕООЩЕ РТЕПВТБЪПЧБОЙС

ч РТПУФПН Document , РПДПВОПН ФПНХ, ЛПФПТЩК ТБУУНБФТЙЧБЕФУС Ч ОБЫЕН ХЮЕВОЙЛЕ, МЕЗЛП РТЕДРПМПЦЙФШ, ЮФП ЧЩЧПДЙНЩК XML РТПУФ, ОП РПНОЙФЕ, ЮФП УМЕДХЕФ ТБУУНБФТЙЧБФШ НОПЗЙЕ ЖБЛФПТЩ, ЛПФПТЩЕ НПЗХФ РТЙЧЕУФЙ Л ХУМПЦОЕОЙА — ТЕДЛП ЧУФТЕЮБАЭЙЕУС, ФБЛЙЕ, ЛБЛ ЖБКМЩ, УПДЕТЦЙНПЕ ЛПФПТЩИ ПРТЕДЕМСЕФУС DTD ЙМЙ УИЕНПК. ч ВПМШЫЙОУФЧЕ УМХЮБЕЧ МХЮЫЕ РПМБЗБФШУС ОБ РТЙМПЦЕОЙЕ, ЛПФПТПЕ ХЦЕ РТЙОЙНБЕФ ЧУЕ ФБЛЙЕ ЧПЪНПЦОПУФЙ ЧП ЧОЙНБОЙЕ.

пДОЙН ЙЪ УРПУПВПЧ, ЛПФПТЩК ТБЪТБВПФЮЙЛЙ ЮБУФП ЧЩВЙТБАФ ДМС УЕТЙБМЙЪБГЙЙ ЙИ ПВЯЕЛФПЧ Document DOM УПУФПЙФ Ч УПЪДБОЙЙ ФПЦДЕУФЧЕООПЗП РТЕПВТБЪПЧБОЙС. ьФП XSL Transformation, ЛПФПТБС ЧЛМАЮБЕФ Ч УЕВС ФБВМЙГЩ УФЙМЕК. оБРТЙНЕТ:

ъДЕУШ ЧЩ УПЪДБЕФЕ ЙУФПЮОЙЛ Й ТЕЪХМШФБФ, ОП РПУЛПМШЛХ ЧЩ ТБВПФБЕФЕ У ФПЦДЕУФЧЕООЩН РТЕПВТБЪПЧБОЙЕН, ЧЩ ОЕ УПЪДБЕФЕ ПВЯЕЛФ ДМС РТЕДУФБЧМЕОЙС ФБВМЙГЩ УФЙМЕК. еУМЙ ВЩ ЬФП ВЩМП ОБУФПСЭЕЕ РТЕПВТБЪПЧБОЙЕ, Ч УПЪДБОЙЙ Transformer ДПМЦОБ ВЩМБ ВЩ ЙУРПМШЪПЧБФШУС ФБВМЙГБ УФЙМЕК. чНЕУФП ЬФПЗП Transformer РТПУФП РТЙОЙНБЕФ ЙУФПЮОЙЛ (Document) Й РПУЩМБЕФ ЕЗП Ч ТЕЪХМШФБФ (ЖБКМ processed.xml ).

тБЪДЕМ 9. тЕЪАНЕ РП DOM

тЕЪАНЕ

DOM — ЬФП СЪЩЛПЧП- Й РМБФЖПТНЕООП-ОЕЪБЧЙУЙНЩК API, ТБЪТБВПФБООЩК ДМС ТБВПФЩ У XML-ДБООЩНЙ. ьФП API, ЛПФПТЩК ЪБЗТХЦБЕФ ЧУЕ ДБООЩЕ Ч РБНСФШ Ч ЧЙДЕ ЙЕТБТИЙЙ ХЪМПЧ РТЕДЛПЧ-РПФПНЛПЧ, ЛПФПТЩНЙ НПЗХФ ВЩФШ ЬМЕНЕОФЩ, ФЕЛУФ, БФТЙВХФЩ ЙМЙ ДТХЗЙЕ ФЙРЩ ХЪМПЧ.

API DOM ДБЕФ ТБЪТБВПФЮЙЛХ ЧПЪНПЦОПУФШ ЮЙФБФШ, УПЪДБЧБФШ Й ТЕДБЛФЙТПЧБФШ XML-ДБООЩЕ. ч ЬФПН ХЮЕВОЙЛЕ ВЩМЙ ТБУУНПФТЕОЩ ЛПОГЕРГЙЙ DOM Й РТПЙММАУФТЙТПЧБОЩ РТЙНЕТБНЙ Java-ЛПДБ. тЕБМЙЪБГЙЙ DOM ФБЛЦЕ ДПУФХРОЩ Ч C++, Perl Й ДТХЗЙИ СЪЩЛБИ.

OpenEdge ABL

Document Object Model (DOM) представляет XML-документ в виде создаваемого в памяти дерева объектов (узлов), определяющих структуру XML. Создание дерева объектов в памяти является удобным способом работы с данными, но ограничивается ее доступным объемом. Таким образом, применение DOM отлично подходит при работе с небольшими XML документами.

XML-документ в ABL DOM представляется объектом X-DOCUMENT.

DEF VAR hDocument AS HANDLE NO-UNDO.
CREATE X-DOCUMENT hDocument.

XML-узлы, представляются объектами X-NODEREF.

DEFINE VARIABLE hNode AS HANDLE NO-UNDO.
CREATE X-NODEREF hNode.

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

  • ATTRIBUTE;
  • CDATA-SECTION;
  • COMMENT;
  • DOCUMENT-FRAGMENT;
  • ELEMENT;
  • ENTITY-REFERENCE;
  • PROCESSING-INSTRUCTION;
  • TEXT.

В качестве примера, рассмотрим XML-документ test.xml:

В DOM данный документ представляется следующим деревом объектов:

Каждый узел имеет своего единственного «родителя» (узел, располагающийся непосредственно над ним). Родительские узлы, в свою очередь, обладают так называемыми дочерними узлами (узлами, расположенными непосредственно под ними). У одного «родителя» может быть несколько дочерних узлов, при этом, каждый из них имеет свой порядковый номер начиная с 1.

На основе таких родительско-дочерних связей и формируется DOM структура XML-документа.

Стоит отметить, что атрибуты (узлы с типом ATTRIBUTE) не являются ни чьими дочерними или родительскими узлами, а относятся непосредственно к узлу элементу (узел с типом ELEMENT).

После завершения работы все созданные объекты должны быть удалены.

DELETE OBJECT hDocument.
DELETE OBJECT hNode.

Работа с XML-документом осуществляется с помощью атрибутов и методов объектов X-DOCUMENT и X-NODEREF.

Атрибут Тип данных
Доступ Описание
HANDLE HANDLE чтение handle объекта XML-документа
NAME СHARACTER чтение/запись Имя источника XML-документа, например имя xml-файла.
ENCODING СHARACTER чтение/запись Определяет текстовую кодировку XML. Задает значение атрибута encoding пролога формируемого XML-докумета.
SCHEMA-PATH СHARACTER чтение/запись Список каталогов содержащих DTD
NONAMESPACE-SCHEMA-LOCATION СHARACTER чтение/запись Определяет расположение XML-схемы валидации формируемого XML-документа
SUPPRESS-NAMESPACE-PROCESSING LOGICAL чтение/запись
NAMESPACE-URI СHARACTER чтение/запись URI пространства имен
NAMESPACE-PREFIX СHARACTER чтение/запись Префикс пространства имен
NUM-CHILDREN INTEGER чтение Количество узлов в структуре XML-документа
UNIQUE-ID INTEGER чтение Уникальный ID объекта в рамках сессии
SYSTEM-ID CHARACTER чтение
PUBLIC-ID CHARACTER чтение
TYPE СHARACTER чтение Тип указателя. Значение «X-DOCUMENT»
SUBTYPE СHARACTER чтение Значение «DOCUMENT»
Метод Описание
ADD-SCHEMA-LOCATION() Задает расположение XML-схемы.
APPEND-CHILD() Добавляет дочерний узел в структуру XML-документа.
CREATE-NODE() Создает узел.
CREATE-NODE-NAMESPACE() Создает элемент определяющий пространство имен XML-документа.
GET-CHILD() Возвращает дочерний узел по его порядковому номеру. Нумерация узлов начинается с 1.
GET-DOCUMENT-ELEMENT() Возвращает корневой элемент XML-документа.
IMPORT-NODE() Импортирует узел из другого XML-документа
INITIALIZE-DOCUMENT-TYPE() Создает новый XML-документ согласно описанию DTD.
INSERT-BEFORE() Добавляет дочерний узел в структуру документа после указываемого.
LOAD() Загружает XML-документ в память для последующей работы с ним как с объектом X-DOCUMENT.
REMOVE-CHILD() Открепляет узел и все его поддерево из структуры XML-документа. Сам узел при этом не удаляется из памяти
REPLACE-CHILD() Заменяет узел новым. При этом старый узел не удаляется из памяти, а просто открепляется от структуры XML-документа.
SAVE() Осуществляет формирование XML-документа из объекта X-DOCUMENT.

ADD-SCHEMA-LOCATION(targetNamespace, location) — данный метод определяет расположение XML-схемы валидации XML-документа посредством пространства имен и физического расположения файла XML-схемы.

  • targetNamespace — пространство имен, значение CHARACTER типа;
  • location — значение CHARACTER типа, определяющее расположение файла XML-схемы.

APPEND-CHILD(x-node-handle) — добавляет существующий узел как последний дочерний узел в структуре XML задаваемого родительского узла. Другими словами данный метод осуществляет размещение существующего узла, открепленного раннее от структуры XML, или созданного с помощью методов CREATE-NODE(), CREATE-NODE-NAMESPACE() или CLONE-NODE().

  • x-node-handle — handle X-NODREF объекта добавляемого узла.

CREATE-NODE(x-node-handle, name, type) — создает узел в текущем XML-документе.

  • x-node-handle — handle X-NODREF объекта , в который будет записан указатель создаваемого нового узла.
  • name — имя создаваемого узла, тип CHARACTER;
  • type — SUBTYPE создаваемого элемента, тип CHARACTER.

CREATE-NODE-NAMESPACE(x-node-handle, namespace-uri, qualified-name, type) — задает пространство имен документа. Может быть заданно как в простом виде — y, так и в составном — x:y.

  • x-node-handle — handle X-NODREF объекта, в который будет записан указатель создаваемого нового узла;
  • namespace-uri — Uniform Resource Identifier (URI) пространства имен, CHARACTER типа;
  • qualified-name —
  • type — SUBTYPE узла, может принимать значение ELEMENT или ATTRIBUTE.

GET-CHILD(x-node-handle, index) — возвращает handle дочернего узла с порядковым номером index.

  • x-node-handle — handle возвращаемого узла;
  • index — порядковый номер узла.

GET-DOCUMENT-ELEMENT(x-node-handle) — возвращает handle X-NODEREF корневого элемента XML-документа.


IMPORT-NODE(x-node, x-source-node, deep) — данный метод осуществляет импорт узла из другого XML-документа, но не размещает его в структуре XML. После того как новый узел импортирован, его необходимо включить в структуру XML с помощью методов APPEND-CHILD() или INSERT-BEFORE().

  • x-node — handle предварительно созданного X-NODREF объекта, в который будет осуществляться импорт;
  • x-source-node — handle импортируемого X-NODREF объекта;
  • deep — значение LOGICAL типа, определяющее осуществлять импорт всего поддерева элемента (TRUE) или импортировать только непосредственно сам элемент (FALSE). З начением по умолчанию является FALSE.

INSERT-BEFORE(x-ref-handle1, x-ref-handle2) — осуществляет добавление узла в структуру XML как дочернего по отношению к тому узлу, чей метод вызывается и размещаемого после указываемого другого дочернего узла этого же родителя. Если узел, за которым должен быть размещен добавляемый элемент не указан, то он будет последним дочерним узлом.

  • x-ref-handle1 — handle объекта X-NODREF имеющегося в структуре узла, за которым необходимо разместить добавляемый в структуру узел;
  • x-ref-handle2 — handle объекта X-NODREF добавляемого узла. Данный узел должен быть предварительно создан.

LOAD(mode < file | memptr | longchar >, validate) — осуществляет загрузку XML-документа из указываемого источника в память, разбирает его и формирует X-DOCUMENT для последующей работы с ним.

  • mode — значение CHARACTER типа, определяющие тип источника XML-документа. Может принимать следующие значения: «FILE», «MEMPTR», или » LONGCHAR»;
  • < file | memptr | longchar > — идентификатор источника данных. Для файла — это его полный или относительный путь, для переменных — идентификатор переменной и т.д;
  • validate — значение LOGICAL типа, определяющие осуществлять валидацию загружаемого XML-документа (TRUE), или не осуществлять ее (FALSE).

REMOVE-CHILD(x-node-handle) — открепляет узел и все его поддерево от структуры XML-документа. Сам узел при этом не удаляется, а остается в памяти.

  • x-node-handle — handle X-NODREF объекта открепляемого узла .

REPLACE-CHILD(new-handle, old-handle) — осуществляет замещение одного узла другим. При этом замещаемый узел только открепляется от структуры XML-документа, а не удаляется. Если замещающий узел находится в структуре XML-документа, то он первоначально открепляется от документа, а после прикрепляется на место замещаемого.

  • new-handle — handle X-NODREF объекта замещающего узла ;
  • old-handle — handle X-NODREF объекта замещаемого узла.

SAVE(mode, < file | stream | stream-handle | memptr | longchar >) — осуществляет формирование и вывод текста XML-документа из X-DOCUMENT.

  • mode — значение CHARACTER типа, определяющие тип приемника XML-документа. Может принимать следующие значения: «FILE», «STREAM», «STREAM-HANDLE», «MEMPTR», или «LONGCHAR»;
  • < file | stream | stream-handle | memptr | longchar > — определение приемника XML-документа.
Атрибут Тип данных Доступ Описание
ATTRIBUTE-NAMES CHARACTER чтение Содержит список имен атрибутов элемента с разделителем запятая. Если элемент не имеет атрибутов значение — «» (пустая строка).
CHILD-NUM CHARACTER Чтение Порядковый номер узла среди своих родственников. Родственными узлами являются узлы принадлежащее одному родителю. Такие узлы нумеруются начиная с 1. Если узел не является дочерним — значение ?
HANDLE HANDLE чтение Содержит указатель на объект узла.
INSTANTIATING-PROCEDURE HANDLE чтение Содержит указатель процедуры, в которой данный узел был объявлен.
LOCAL-NAME
NAME CHARACTER чтение/запись Имя узла
NAMESPACE-PREFIX СHARACTER чтение/запись Префикс пространства имен
NAMESPACE-URI СHARACTER чтение/запись URI пространства имен
NODE-VALUE СHARACTER чтение/запись Возвращает и устанавливает значение узла
NUM-CHILDREN INTEGER чтение Количество дочерних элементов
OWNER-DOCUMENT HANDLE чтение Содержит указатель на X-DOCUMENT, к которому относится узел
SUBTYPE СHARACTER чтение Тип узла. Возможны следующие значения:
  • ATTRIBUTE;
  • CDATA-SECTION;
  • COMMENT;
  • DOCUMENT-FRAGMENT;
  • ELEMENT;
  • ENTITY-REFERENCE;
  • PROCESSING-INSTRUCTION;
  • TEXT.
TYPE СHARACTER чтение Тип указателя. Значение «X-NODEREF»
UNIQUE-ID INTEGER чтение Уникальный ID узла в рамках XML-документа
Метод Описание
APPEND-CHILD() Добавляет узел в конец XML-документа или другого узел
CLONE-NODE() Осуществляет клонирование существующего узла
DELETE-NODE() Удаляет узел
GET-ATTRIBUTE() Возвращает значение указанного атрибута элемента
GET-ATTRIBUTE-NODE() Возвращает handle указанного атрибута элемента
GET-CHILD() Возвращает handle дочернего узла
GET-PARENT() Возвращает handle родительского узла
INSERT-BEFORE() Добавляет узел в структуру документа после указываемого другого дочернего узла того же родителя.
LONGCHAR-TO-NODE-VALUE() Присваивает значение LONGCHAR типа узлу XML
MEMPTR-TO-NODE-VALUE() Присваивает значение MEMPTR типа узлу XML
NODE-VALUE-TO-LONGCHAR() Преобразовывает значение NODE-VALUE в LONGCHAR тип
NODE-VALUE-TO-MEMPTR() Преобразовывает значение NODE-VALUE в MEMPTR тип
NORMALIZE()
REMOVE-ATTRIBUTE() Удаляет указываемый атрибут элемента
REMOVE-CHILD() Открепляет узел и все его поддерево из структуры XML-документа. Сам узел при этом не удаляется из памяти
REPLACE-CHILD() Заменяет узел другим узлом в структуре XML-документа. Заменяемый узел при этом не удаляется из памяти.
SET-ATTRIBUTE() Добавляет атрибут элементу.
SET-ATTRIBUTE-NODE() Связывает указываемый атрибут с текущим элементом

CLONE-NODE(x-node-handle, deep) — осуществляет клонирование текущего узла.

  • x-node-handle — handle предварительно созданного X-NODREF объекта, в который будет осуществляться клонирование;
  • deep — значение LOGICAL типа, отражающее клонировать все дерево узла (TRUE), или только сам узел (FALSE). Значением по умолчанию является FALSE.

DELETE-NODE() — открепляет узел от структуры XML и удаляет его из памяти.

GET-ATTRIBUTE(name) — возвращает значение указанного атрибута элемента.

  • name — имя атрибута, тип CHARACTER.

GET-ATTRIBUTE-NODE(attr-node-handle, name) — возвращает handle указанного атрибута элемента.

  • attr-node-handle — handle возвращаемого атрибута;
  • name — имя возвращаемого атрибута, тип CHARACTER.

GET-PARENT(x-node-handle) — возвращает handle родителя. Для корневого элемента XML возвращается неизвестное значение (?).

  • x-node-handle — handle возвращаемого родительского узла.

LONGCHAR-TO-NODE-VALUE(longchar) — метод присвоения значения LONGCHAR типа атрибуту X-NODEREF:NODE-VALUE .

  • longchar — присваиваемое значение LOGNCHAR типа.

MEMPTR-TO-NODE-VALUE(memptr) — метод присвоения значения MEMPTR типа атрибуту X-NODEREF:NODE-VALUE .

  • memptr — присваиваемое значение MEMPTR типа.

NODE-VALUE-TO-LONGCHAR(longchar [codepage]) — метод вывода значения X-NODEREF:NODE-VALUE с преобразованием значения в LONGCHAR тип в указываемой текстовой кодировке.

  • longchar — приемник значения, тип LONGCHAR;
  • codepage — текстовая кодировка, тип CHARCTER.

NODE-VALUE-TO-MEMPTR(memptr) — метод вывода значения X-NODEREF:NODE-VALUE с преобразованием значения в тип MEMPTR .

  • memptr — приемник значения, тип MEMPTR.

REMOVE-ATTRIBUTE(<attribute-name | index> [, namespaceURI]) — удаляет атрибут элемента. Если удаляемому атрибуту определено начальное значение в описании DTD, то он устанавливается для атрибута.


  • attribute-name — имя атрибута, тип CHARACTER;
  • index — порядковый номер атрибута в списке атрибутов элемента (нумерация начинается с 1), тип INTEGER;
  • namespaceURI — URI пространства имен элемента, тип CHARACTER.

SET-ATTRIBUTE(name, value) — добавляет атрибут элементу. Если атрибут с таким именем уже существует у элемента, то его значение заменятся значением добавляемого атрибута .

  • name — имя добавляемого атрибута, тип CHARACTER;
  • value — значение атрибута, тип CHARACTER.

СОЗДАНИЕ XML-ДОКУМЕНТА

В результате мы получим примерно следующий XML файл.

Создание XML файла средствами DOM XML

D OM XML предоставляет несколько удобных способов создания XML файлов. В этой статье мы рассмотрим один из них. В общем случае процедуру можно описать так:

  1. В первую очередь, нам необходимо создать объект типа Document с помощью объекта DocumentBuilder .
  2. Вновь созданный документ заполняется содержимым: узлами (нодами), элементами и атрибутами. Это делается с помощью класса Element .
  3. Наконец, с помощью объекта типа Transformer мы переводим объектное представление XML документа в текстовый вид. Текстовый вид XML документа, как правило, сохраняется в файл (хотя может быть, например, распечатано, что будет показано в настоящей статье).

DOM – Объектная модель документа для работы с XML файлами

DOM часть первая

В состав библиотеки базовых классов (BCL) платформы .NET Framework входит сборка System.Xml.dll, в которой хранится реализация технологии DOM.

XML DOM (Document Object Model)

DOM (Объектная модель документа) — это не зависящий от платформы и языка интерфейс, который позволяет получать доступ к XML файлам, изменять их структуру и содержимое.

Представляет содержимое файла XML в виде дерева узлов хранимое в памяти компьютера.

Принцип работы DOM

Для начала работы необходимо подключить в свой проект пространство имён: System.XML. Обычно оно подключается автоматически при создании проекта.

Основная работа с XML файлами осуществляться благодаря dll сборке System.Xml, которая предоставляет для работы с DOM все необходимые типы и члены.

Создание файла XML

Вне зависимости от типа задачи, любая работа с DOM, начинается с построения виртуального файла XML в памяти компьютера, точнее сказать каркаса будущего файла. В платформе .NET данную задачу решает класс XMLDocument. Для этого необходимо создать объект данного класса.

Открытие файла XML

После того, как виртуальный файл (каркас) создан. Можно перейти к работе с физическим файлом XML. Физический файл — это файл, который храниться на жёстком диске. Для работы с физическим файлом, применяется метод Load(), всё того же класса XMLDocument.

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

Пример создания создания виртуального файла.

После того, как был создан виртуальный файл в памяти компьютера, Вы можете начать работать с ним, как с обычным физическим файлом. То есть выполнять любые обычные операции: добавлять, изменять, удалять данные в файле XML и многое другое.

При этом надо помнить, что все изменения затрагивать виртуальный файл, а не физический!

Сохранение в XML файл

После того, как проделаны все необходимые операции над виртуальным файлом, необходимо выполнить выгрузку или сохранение данных в физический файл. Чтобы внести изменения в физический файл используется метод Save(), всё того же класса XMLDocument.

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

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

Узлы (Node)

Для дальнейшей работы нам понадобиться создать XML файл, который мы будем использовать в качестве примера.

Весь XML файл – это один объект, который можно представить в виде дерева узлов. Под узлом можно понимать любое содержимое файла XML, будь-то декларация, комментарий, элементы и другое. То есть нужно запомнить, что к чему бы мы не обращались в XML файле, с точки зрения DOM, будет являться узлом (Node). Один узёл может содержать любое количество элементов.

Если наш, выше описанный пример, представить в виде дерева, то получим следующее:

Типы узлов

Дерево представляет собой столб, под которым подразумевается корневой (root) элемент, в нашем случаи – это элемент “garage”. Все узлы крепятся к данному столбу, как ветки у дерева. Так как узлов может быть много, они делятся на типы, вот некоторые из них:

DOCUMENT документ document
ELEMENT элемент
ATTRIBUTE атрибут элемента
TEXT текстовый узел текст
COMMENT комментарий

В .NET Framework, для получения типа узла применяется класс Xml Node Type. А в свою очередь, для каждого типа есть свой класс для работы с ним.

Типы узлов и классы для работы с нимиXml Node Type .NET Framework Class

Document XmlDocument
Document Type XmlDocumentType
Element XmlElement
Attribute XmlAttribute
Text XmlText
Entity XmlEntity
Comment XmlComment

Корневой элемент

Как упоминалось ранее, корневой элемент является столбом, к которому крепятся узлы.

Для того, чтобы научиться передвигаться по дереву, необходимо для начала получить в нашем коде root-элемент, от которого мы будем отталкиваться, для достижения нужного узла.

Получение корневого элемента:

В результате выполнения данного кода, на экран будет выведено слово «garage», которое является именем нашего root-элемента. То есть доступ к корневому элементу был получен, и теперь отталкиваясь от этой точки, мы может перемещаться по дереву и получать нужные нам данные, а так же добавлять новые узлы в наше дерево, но об этом более подробно в следующей статье.

Илон Маск рекомендует:  Разыменование ссылок
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL