Читать «Java 7 (Наиболее полное руководство)» онлайн - страница 479

Ильдар Шаукатович Хабибуллин

Корпорация Sun Microsystems реализовала интерфейсы DOM в пакетах javax.xml. parsers и org.w3c.dom, входящих в состав пакета JAXP. Воспользоваться этой реализацией очень легко:

DocumentBuilderFactory fact =

DocumentBuilderFactory.newInstance();

DocumentBuilder builder = fact.newDocumentBuilder();

Document doc = builder.parse("ntb.xml");

Метод parse () строит дерево объектов и возвращает ссылку на него в виде объекта типа Document. В классе DocumentBuilder есть несколько методов parse ( ), позволяющих загрузить файл с адреса URL, из входного потока, как объект класса File или из источника класса InputSource.

Интерфейс Document, расширяющий интерфейс Node, описывает дерево объектов документа в целом. Интерфейс Node — основной интерфейс в описании структуры дерева — описывает узел дерева. У него есть еще один наследник — интерфейс Element, описывающий лист дерева, соответствующий элементу документа XML. Как видно из структуры наследования этих интерфейсов, и само дерево, и его лист считаются узлами дерева. Каждый атрибут элемента дерева описывается интерфейсом Attr. Еще несколько интерфейсов — CDATASection, Comment, Text, Entity, EntityReference, ProcessingInstruction, Notation — описывают разные типы элементов XML.

На рис. 28.2 показано начало дерева объектов, построенного по документу, приведенному в листинге 28.2. Обратите внимание на то, что текст, находящийся в теле элемента, хранится в отдельном узле дерева — потомке узла элемента. Для каждого атрибута открывающего тега тоже создается отдельный узел.

Рис. 28.2. Дерево объектов документа XML

Интерфейс Node

Интерфейс Node описывает тип узла одной из следующих констант:

□ attribute_node — узел типа Attr, содержит атрибут элемента;

□ CDATA_SECTION_NODE узел типа CDADASection, содержит данные типа CDATA;

□ comment_node — узел типа Comment, содержит комментарий;

□ DOCUMENT_FRAGMENT_NODE в узле типа DocumentFragment находится фрагмент документа;

□ DOCUMENT_NODE корневой узел типа Document;

□ DOCUMENT_TYPE_NODE узел типа Document;

□ ELEMENT_NODE узел является листом дерева типа Element;

□ entity_node — в узле типа Entity хранится сущность entity;

□ ENTITY_REFERENCE_NODE в узле типа EntityReference хранится ссылка на сущность;

□ NOTATION_NODE-в узле хранится нотация типа Notation;

□ PROCESSING_INSTRUCTION_NODE- узел типа ProcessingInstruction, содержит инструкцию

по обработке;

□ TEXT_NODE в узле типа Text хранится текст.

Методы интерфейса Node описывают действия с узлом дерева:

□ public short getNodeType ( ) — возвращает тип узла;