Подобно парсеру TinyXml парсер Xerces DOM на выходе формирует документ XML в виде объекта C++, имеющего структуру дерева, узлы которого представляют компоненты документа. Однако парсер Xerces существенно сложнее: например, в отличие от TinyXml он «понимает» пространства имен XML и может выполнять синтаксический анализ сложных DTD. Этим парсером также формируется гораздо более детальное представление документа XML, включающее инструкции обработки и URI пространств имен, относящиеся к элементам и атрибутам. Очень важно то, что он предоставляет доступ к информации через интерфейс, описанный в спецификации W3C DOM.
Спецификация W3C, которая все еще дорабатывается, имеет несколько «уровней»; в настоящее время предусматривается три уровня. Классы
DOMImplementation
,
DOMDocument
,
DOMElement
и
DOMNodeList
, использованные в примере 14.10, описываются на уровне 1 спецификации DOM. Классы
DOMBuilder
и
DOMWrite
описываются на уровне 3 спецификации DOM как часть рекомендаций по функции загрузки и сохранения (Load и Save).
Имена классов Xerces не всегда совладают с именами интерфейсов W3C DOM, которые они реализуют; это происходит из-за того, что Xerces реализует несколько спецификаций в одном пространстве имен и использует префиксы в именах классов, чтобы избежать конфликтов имен.
Понимание примера 14.10 теперь не должно вызывать затруднений. Я начинаю с инициализации Xerces, как это делается в примере 14.8. Затем я получаю
DOMImplementation
из
DOMImplementationRegistry
, запрашивая функцию загрузки и сохранения путем передачи строки «
LS
» статическому методу
DOMImplementationRegistry::getDOMImplementation
. На следующем шаге я получаю
DOMBuilder
из
DOMImplementation
. Мне приходится тип
DOMImplementation
привести к типу
DOMImplementationLS
, потому что функция загрузки и сохранения недоступна из интерфейса
DOMImplementation
согласно спецификации W3C DOM уровня 1. Первый аргумент
createDOMBuilder
показывает, что возвращаемый парсер будет работать в синхронном режиме. Другой возможный режим, а именно асинхронный режим, в настоящее время не поддерживается в Xerces.