
- •Лекция 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.1.2. КлассDocumentBuilderFactory
Класс DocumentBuilderFactoryпакетаjavax.xml.parsersопределяет производственный (factory) интерфейс прикладного программирования для конфигурирования и полученияDOM-анализатора.
Новый экземпляр этого класса можно получить с помощью метода
public static DocumentBuilderFactory newInstance()
throws FactoryConfigurationError.
Создание нового экземпляра DOM-анализатора с использованием текущих производственных параметров выполняется с помощью метода
public abstract DocumentBuilder newDocumentBuilder()
throws ParserConfigurationException
В классе DocumentBuilderFactoryопределены также конкретные реализации методов получения и установки значений параметров конфигурации данногоDOM-анализатора.
Так, методы
public boolean isNamespaceAware()
public void setNamespaceAware(boolean awareness)
проверяют возможность работы с пространствами имен или устанавливают возможность работы с пространствами имен (при значении awareness, равномtrue), а методы
public boolean isValidating()
public void setValidating(boolean validating).
проверяют возможность определения действительности документа XMLили устанавливают проверку действительности документаXML(при значенииvalidating, равномtrue)
По умолчанию значения awarenessиvalidatingустановлены вfalse.
Методы
public boolean isExpandEntityReferences()
public void
setExpandEntityReferences(boolean expandEntityRef)
проверяют возможность DOM-анализатора расширять узлы ссылок на сущности в документе XML или устанавливают возможность расширения узлов ссылок на сущности в документе XML (при значении expandEntityRef, равном true) По умолчанию значение expandEntityRef установлено в true.
Методы
public boolean isIgnoringComments()
public void setIgnoringComments(boolean ignoreComments)
проверяют, игнорирует ли DOM-анализатор комментарии в документеXMLили устанавливают режим игнорирования комментариев в документеXML(при значенииignoreComments, равномtrue) По умолчанию значениеignoreComments установлено вfalse.
Методы
public boolean isIgnoringElementContentWhitespace()
public void
setIgnoringElementContentWhitespace(boolean whitespace)
проверяют, игнорирует ли DOM-анализатор лишние пробелы в содержимом элемента документа XML или устанавливают режим игнорирования лишних пробелов в содержимом элемента документа XML (при значении whitespace, равном true) По умолчанию значение whitespace установлено в false.
Методы
public boolean isCoalescing()
public void setCoalescing(boolean coalescing)
проверяют, сконфигурирован ли DOM-анализатор для преобразования узлов типаCDATAв узлы типаTextи присоединяют их к соседнему узлу (если он существует) в документеXMLили устанавливают режим такого преобразования в документеXML(при значенииcoalescing, равномtrue) По умолчанию значениеcoalescing установлено вfalse.
Методы
public abstract Object getAttribute(String name)
throws IllegalArgumentException
public abstract void setAttribute(String name,
Object value) throws IllegalArgumentException
позволяют пользователю получать или устанавливать значение указанного атрибута в данной реализации.
Примеры открытия документа XML:
1. Открытие существующего файла email.xml(см.5.1.1.5.2):
import org.w3c.dom.*;
import javax.xml.parsers.*;
…
Document emailDoc;
…
try {
// Создание объекта DocumentBuilderFactory
DocumentBuilderFactory emailFactory =
DocumentBuilderFactory.newInstance();
// Создание объекта DocumentBuilder
DocumentBuilder emailBuilder =
emailFactory.newDocumentBuilder();
// Анализ документа в файле email.xml
emailDoc = emailBuilder.parse("email.xml");
// Обработка документа emailDoc
…
}
// Обработка исключений
catch(Exception e) {
System.out.println("Ошибка XML:" +
e.getMessage());
}
2. Создание дерева нового документа newEmail.xmlс использованием методаnewDocument():
import org.w3c.dom.*;
import javax.xml.parsers.*;
…
Document newEmailDoc;
…
try {
// Создание объекта DocumentBuilderFactory
DocumentBuilderFactory newEmailFactory =
DocumentBuilderFactory.newInstance();
// Создание объекта DocumentBuilder
DocumentBuilder newEmailBuilder =
newEmailFactory.newDocumentBuilder();
// Создание нового документа newEmailDoc
newEmailDoc = newEmailBuilder.newDocument();
// Формирование документа newEmailDoc
…
}
// Обработка исключений
catch(Exception e) {
System.out.println("Ошибка XML:" +
e.getMessage());
}
3. Создание дерева нового документа email1.xmlс использованием методаgetDOMImplementation():
import org.w3c.dom.*;
import javax.xml.parsers.*;
…
Document email1Doc;
…
try {
// Создание объекта DocumentBuilderFactory
DocumentBuilderFactory email1Factory =
DocumentBuilderFactory.newInstance();
// Создание объекта DocumentBuilder
DocumentBuilder email1Builder =
email1Factory.newDocumentBuilder();
// Создание объекта DOMImplementation
DOMImplementation email1Impl =
email1Builder.getDOMImplementation();
// Создание нового документа email1Doc
email1Doc = email1Impl.createDocument(
null,"email-folder", null);
// Формирование документа emailDoc
…
}
// Обработка исключений
catch(Exception e) {
System.out.println("Ошибка XML:" +
e.getMessage());
}