Интерфейсы Document, DocumentFragment и DocumentType

Интерфейс Document помимо методов интерфейса Node, содержит методы работы с документом в целом.

Следует иметь в виду, что в отличие от модели DOM для JavaScript, документ не содержит дочернего узла с именем xml (этот узел типа PROCESSING_INSTRUCTION_NODE содержит дескриптор <?xml …?>).

Метод

public DocumentType getDocType()

возвращает объект типа DocumentType (DTD документа).

Метод

public DOMImplementation getImplementation()

возвращает объект DOMImplementation, который обрабатывает данный документ (приложение DOM может использовать объекты из разных реализаций).

Метод

public Element getDocumentElement()

возвращает корневой элемент дерева объектов, а методы

public NodeList getElementsByTagName(String)

public NodeList getElementsByTagNameNS(String namespaceURI,

String localName)

возвращают все элементы либо с указанным именем tagname, либо с заданным URI пространства имен namespaceURI и локальным именем localName.

 

Примеры использования методов поиска и изменения в интерфейсе Document:

1. Получение имени и типа корневого элемента email.xml:

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

Node rootElement = emailDoc.getDocumentElement();

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

String rootElementName = rootElement.getNodeName();

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

short rootElementType = rootElement.getNodeType();

// Вывод имени и типа корневого элемента emailDoc

System.out.println("Корневой элемент 'email.xml': " +

rootElementName + " Тип: " + rootElementType);

Вывод этого фрагмента программы будет иметь следующий вид:

Корневой элемент 'email.xml': email-folder Тип: 1

 

2. Вывод списка тем сообщений в email.xml:

// Получение списка элементов subject

NodeList subjectList =

emailDoc.getElementsByTagName("subject");

// Получение количества элементов subject

int subjectNumber = subjectList.getLength();

System.out.println("Количество сообщений: " +

subjectNumber);

// Получение тем сообщений в цикле

for (int i=0; i < subjectNumber;i++) {

// Получение текущей темы

String subjectValue =

subjectList.item(i).getFirstChild().getNodeValue();

// Вывод текущей темы

System.out.println("Тема " + (i+1) + ": '" +

subjectValue + "'");

}

Вывод этого фрагмента программы будет иметь следующий вид:

Количество сообщений: 5

Тема 1: 'Поздравление'

Тема 2: 'Напоминание'

Тема 3: 'Отказ'

Тема 4: 'Вопрос'

Тема 5: 'Ответ'

 

3. Изменение значения темы в первом сообщении:

// Новое значение темы

String newSubject = "Новогоднее поздравление";

// Изменение содержимого первой темы

subjectList.item(0).getFirstChild().setNodeValue(

newSubject);

// Получение нового значения темы

String newSubjectValue =

subjectList.item(0).getFirstChild().getNodeValue();

// Вывод нового значения темы

System.out.println("Новая тема 1: '" +

newSubjectValue + "'");

Вывод этого фрагмента программы будет иметь следующий вид:

Новая тема 1: 'Новогоднее поздравление'

 

Метод

public Element getElementById(String elementId)

возвращает элемент, значение атрибута с именем id которого равно elementId.

 

Несколько методов позволяют изменить структуру и содержимое дерева объектов.

Создание нового пустого элемента или атрибута выполняется с помощью методов

public Element createElement(String tagName)

throws DOMException

public Element createElementNS(String namespaceURI,

String localName) throws DOMException

public Attr createAttribute(String name)

throws DOMException

public Attr createAttributeNS(String namespaceURI,

String qualifiedName) throws DOMException

создают узел или атрибут либо по имени (tagName или name), либо по заданному URI пространства имен namespaceURI и локальному имени localName.

Методы

public CDATASection createCDATASection(String data)

throws DOMException

public EntityReference createEntityReference(String name)

throws DOMException

public ProcessingInstruction

createProcessingInstruction(String target,

String data) throws DOMException

public Text createTextNode(String data)

throws DOMException

public Comment createComment(String data)

throws DOMException

создают узлы типа CDATASection, EntityReference, ProcessingInstruction, Text и Comment.

 

Примеры использования методов создания и добавления элементов в интерфейсе Document:

1. Создание структуры документа для newEmail.xml:

// Создание корневого элемента newEmailDoc

Element newEmailRootElement =

newEmailDoc.createElement("new-email-folder");

// Добавление корневого элемента

// в документ newEmailDoc

newEmailDoc.appendChild(newEmailRootElement);

// Создание элемента message1

Element message1Element =

newEmailDoc.createElement("message");

// Добавление к корневому элементу дочернего

// элемента message1

newEmailRootElement.appendChild(message1Element);

// Создание комментария

Comment msgComment =

newEmailDoc.createComment("Сообщение 1");

// Создание элемента header

Element headerElement =

newEmailDoc.createElement("header");

// Создание элемента body

Element bodyElement =

newEmailDoc.createElement("body");

// Создание текстового узла для элемента body

Text bodyText =

newEmailDoc.createTextNode("Завтра зачет по физике.");

// Добавление текстового узла для элемента body

bodyElement.appendChild(bodyText);

// Добавление комментария к элементу message1

message1Element.appendChild(msgComment);

// Добавление к элементу message1

// дочернего элемента header

message1Element.appendChild(headerElement);

// Добавление к элементу message1

// дочернего элемента body

message1Element.appendChild(bodyElement);

// Клонирование элемента message1

Node message2Element = message1Element.cloneNode(true);

// Добавление к корневому элементу дочернего

// элемента message2

newEmailRootElement.appendChild(message2Element);

// Получение списка элементов message

NodeList messageList =

newEmailDoc.getElementsByTagName("message");

// Изменение комментария в элементе message2

messageList.item(1).getFirstChild().setNodeValue(

"Сообщение 2");

// Получение списка элементов body

NodeList bodyList =

newEmailDoc.getElementsByTagName("body");

// Изменение текста сообщения в элементе message2

bodyList.item(1).getFirstChild().setNodeValue(

"Спасибо, что напомнил");

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

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<new-email-folder>

<message>

<!--Сообщение 1-->

<header/>

<body>Завтра зачет по физике.</body>

</message>

<message>

<!--Сообщение 2-->

<header/>

<body>Спасибо, что напомнил</body>

</message>

</new-email-folder>

 

Метод

public Node importNode(Node importedNode, boolean deep)

throws DOMException

импортирует (копирует) узел из другого документа в данный документ. Возвращаемый узел не имеет родительского узла. Если для параметра задано значение true, то копируется также поддерево данного узла.

 

Пример использования метода importNode():

В новый документ email1Doc импортируются второе и третье сообщение документа email1Doc (email.xml):

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

Node root1Element = email1Doc.getDocumentElement();

// Получение списка элементов message в emailDoc

NodeList sourceMessageList =

emailDoc.getElementsByTagName("message");

// Импорт второго сообщения из email.doc в email1.doc

Node resultMessage2 =

email1Doc.importNode(sourceMessageList.item(1), true);

// Добавление второго сообщения в email1.doc

root1Element.appendChild(resultMessage2);

// Импорт третьего сообщения из email.doc в email1.doc

Node resultMessage3 =

email1Doc.importNode(sourceMessageList.item(2), true);

// Добавление третьего сообщения в email1.doc

root1Element.appendChild(resultMessage3);

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

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<email-folder>

<message>

<!-- Сообщение 2 -->

<header>

<address>

<from value="ivanov@mail.com"/>

<to value="sidorov@mail.com"/>

</address>

<subject>Напоминание</subject>

</header>

<body>Встречаемся в 10.00.</body>

</message>

<message>

<!-- Сообщение 3 -->

<header>

<address>

<from value="sidorov@mail.com"/>

<to value="ivanov@mail.com"/>

</address>

<subject>Отказ</subject>

</header>

<body>Я не смогу в это время.</body>

</message>

</email-folder>

 

Интерфейс DocumentFragment используется для выделения части дерева документа или для создания нового фрагмента документа. Интерфейс не имеет собственных свойств и методов, а только свойство и методы, унаследованные от интерфейса Node.

Создать узел типа DocumentFragment – фрагмент данного документа можно с помощью метода

public DocumentFragment createDocumentFragment()

интерфейса Document.

Интерфейс DocumentType обеспечивает доступ к DTD документа XML. Помимо свойств и методов, унаследованных от интерфейса Node, для DocumentType определены следующие методы.

Метод

public String getName()

позволяет получить имя DTD, т.е. идентификатор, следующий сразу за ключевым словом DOCTYPE, а метод

public String getInternalSubset()

позволяет получить содержимое внутреннего DTD как строку.

Методы

public String getPublicId()

public String getSystemId()

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

Методы

public NamedNodeMap getEntities()

public NamedNodeMap getNotations()

позволяют получить определенные в DTD сущности и нотации как узлы типа NamedNodeMap.








Дата добавления: 2015-03-20; просмотров: 703;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.034 сек.