
- •Лекция 4-06
- •Тема 5.2. Обработка документов xml с использованием Java
- •Тема 5.2. Обработка документов xml с использованием Java
- •5.2.1. Обработка документов xml
- •5.2.2. СинтаксическиеSax-анализаторыXml
- •5.2.3. РеализацияDomxmLв языкеJava
- •5.2.3.1. Доступ к документу xml
- •5.2.3.1.1. Класс DocumentBuilder
- •5.2.3.1.2. КлассDocumentBuilderFactory
- •5.2.3.2. Интерфейсы dom xml в языкеJava
- •5.2.3.2.1. ИнтерфейсDomImplementation
- •5.2.3.2.2. ИнтерфейсNodeList
- •5.2.3.2.3. ИнтерфейсNamedNodeMap
- •5.2.3.2.4. ИнтерфейсNode
- •5.2.3.2.5. ИнтерфейсыDocument,DocumentFragmentиDocumentType
- •Тема 1: 'Поздравление'
- •5.2.3.2.6. ИнтерфейсElement
- •5.2.3.2.7. ИнтерфейсAttr
- •5.2.3.2.8. Интерфейсы CharacterData, Text, Comment и cdataSection
- •5.2.3.2.9. ИнтерфейсыEntity,EntityReference,NotationиProcessingInstruction
- •5.2.3.2.10. ИсключениеDomException
- •5.2.3.3. Средства выполнения преобразований документовXmLв языкеJava
- •5.2.3.3.1. Общие средства выполнения преобразований документовXml
- •5.2.3.3.2. Средства преобразования дляDom-анализатора
- •5.2.3.3.3. Средства преобразования для потоков ввода-вывода
5.2.3.2.4. ИнтерфейсNode
Интерфейс Nodeпредставляет единичный узел и является, как видно из рисунка, первичным типом данных для всей объектной модели документа.
Поля интерфейса Node(с модификаторамиpublic static final short) описывают тип узла:
ATTRIBUTE_NODE(2)– узел типаAttr, содержит атрибут элемента;
CDATA_SECTION_NODE (4) – узел типа CDADASection;
COMMENT_NODE (8) – узел типа Comment;
DOCUMENT_FRAGMENT_NODE (11) – узел типа DocumentFragment;
DOCUMENT_NODE (9) – корневой узел типа Document;
DOCUMENT_TYPE_NODE (10) – узел типа DocumentType;
ELEMENT_NODE (1) – узел типа Element;
ENTITY_NODE (6) – узел типа Entity;
ENTITY_REFERENCE_NODE (5) – узел типа EntityReference;
NOTATION_NODE (12) – узел типа Notation;
PROCESSING_INSTRUCTION_NODE (7) – узел типа ProcessingInstruction;
TEXT_NODE (3) – узел типа Text.
Методы интерфейса Nodeописывают действия с узлом дерева.
Проверить, поддерживается компонент для версии в узле можно с помощью метода
public boolean isSupported(String feature, String version)
(этот метод действует аналогично методу hasFeatureв интерфейсеDOMImplementation).
Узнать тип узла, имя узла и значение, хранящееся в узле можно с помощью методов
public short getNodeType()
public String getNodeName()
public String getNodeValue()
Установить новое значение для узла можно с помощью метода
public void setNodeValue(String nodeValue)
throws DOMException.
Методы
public String getLocalName()
public String getNamespaceURI()
позволяют получить локальное имя для узла и URIдля пространства имен, а методы
public String getPrefix()
public void setPrefix(String prefix) throws DOMException
позволяют получить или установить префикс пространства имен для узла.
Проверить, есть ли атрибуты у элемента XML, можно с помощью метода
public boolean hasAttributes().
Атрибуты, заданные для узла, возвращает метод
public NamedNodeMap getAttributes().
Если у элемента нет атрибутов, этот метод возвращает null.
Метод
public boolean hasChildNodes()
проверяет, есть ли у данного узла узлы-потомки. Если они есть, то можно получить их список в виде объекта типа NodeListс помощью метода
public NodeList getChildNodes().
Первый и последний узлы в этом списке можно получить с помощью методов
public Node getFirstChild()
public Node getLastChild().
Родительский узел данного узла можно получить с помощью метода
public Node getParentNode(),
а соседние узлы с тем же родительским узлом, что и данный узел, – с помощью методов
public Node getPreviousSibling()
public Node getNextSibling().
Первый метод возвращает предыдущий узел, второй – следующий узел (если такого узла нет, возвращается null).
Ссылку на весь документ можно получить с помощью метода
public Document getOwnerDocument().
Большая группа методов интерфейса Nodeпозволяет изменить дерево объектов. Добавить новый дочерний узелnewChildкак последний в списке узлов можно с помощью метода
public Node appendChild(Node newChild) throws DOMException.
Вставить новый дочерний узел newChildперед существующим дочерним узломrefChildможно с помощью метода
public Node insertBefore(Node newChild, Node refChild)
throws DOMException,
Заменить дочерний узел oldChild новым узлом newChild можно с помощью метода
public Node replaceChild(Node newChild, Node oldChild)
throws DOMException,
а удалить дочерний узел childможно с помощью метода
public Node removeChild(Node child) throws DOMException.
Создать копию узла можно с помощью метода
public Node cloneNode(boolean deep).
Если параметр deepзадан какtrue, то копируется также и поддерево для узла, иначе копируется только сам узел и его атрибуты (если они есть).
Метод
public void normalize()
преобразует узлы типа Textв поддереве данного узла в нормальную форму, т.е. в такую форму, в которой нет смежных текстовых узлов (эти узлы сливаются в один узел) или пустых текстовых узлов (такие узлы удаляются).