Интерфейсы 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; просмотров: 697;