
- •Лекция 5
- •Правильные и валидные документы
- •Document type definition (DTD)
- •Пример размещения внутри документа
- •Пример размещения DTD снаружи документа
- •Назначение DTD
- •Блоки XML документа
- •Определение элемента
- •Определение элемента
- •Определение суб-элементов
- •Количество суб-элементов
- •Смешанное содержание
- •Атрибуты
- •Типы атрибутов
- •Атрибуты: значения по-умолчанию
- •Атрибуты: значение по-умолчанию
- •Атрибуты: значение по-умолчанию
- •Определение нескольких атрибутов
- •Сущности
- •Внешние сущности
- •Работа с XML на платформе Java
- •Разбор (анализ) документа
- •Разбор документа
- •Иерархия интерфейсов DOM
- •Начало анализа
- •Перечисление суб-элементов
- •Перечисление суб-элементов
- •Перечисление суб-элементов
- •Текстовое содержимое элемента
- •Перечисление атрибутов
- •Валидация документа
- •Создание XML документа
- •Сохранение XML документа
Работа с XML на платформе Java
Разбор (анализ) документа
DOM (Document Object Model) — считывает документ и представляет его в виде древовидной структуры
SAX (Simple API for XML) — генерирует события по мере чтения документа
Разбор документа
Создание объекта анализатора
DocumentBuildFactory factory = DocumentBuildFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Разбор документа:
File f = ...;
Document doc = builder.parse(f);
Пакеты: java.xml.* org.w3c.dom.*;

Иерархия интерфейсов DOM
Node
Attr |
Charact |
Document |
Document |
Element |
Notation |
|
er |
Type |
|||||
|
|
|
|
|||
|
Data |
|
|
|
|
Text |
Comme |
Document |
Entity |
Entity |
|
nt |
Fragment |
Reference |
|||
|
|
||||
CDAT |
|
|
|
|
|
A |
|
|
|
Processing |
|
sectio |
|
|
|
||
|
|
|
Instruction |
||
n |
|
|
|
||
|
|
|
|
Начало анализа
Element root = doc.getDocumentElement();
XML пример:
<?xml version="1.0">
<font>
...
</font>
root — объект-элемент «font». Получение тега элемента:
String tagName = root.getTagName(); // «font»
Перечисление суб-элементов
NodeList children = root.getChildNodes();
for (int i = 0; i < children.getLength(); i+
+)
{
Node child = children.item(i);
...
}
Перечисление суб-элементов
XML:
<font>
<name>Helvetica</name>
<size>36</size>
</font>
У элемента <font> 5(!) суб-элементов:
Разделитель (перевод строки) между <font> и <name>
Элемент name
Разделитель между </name> и <size>
Элемент <size>
Разделитель между </size> и </font>
Перечисление суб-элементов
NodeList children = root.getChildNodes();
for (int i = 0; i < children.getLength(); i+
+)
{
Node child = children.item(i); if (child instance of Element) {
Element childElement = (Element) child;
...
}
}
Текстовое содержимое элемента
. . .
Element childElement = (Element) child;
Text textNode = childElement.getFirstChild();
String text = textNode.getData().trim();
...
Перечисление атрибутов
NamedNodeMap attributes = element.getAttributes();
for (int i = 0; i < attributes.getLength(); i++)
{
Node attributeNode = attributes.item(i);
String name = attributeNode.getNodeName(); String value = attributeNode.getNodeValue();
}
или:
String unit = element.getAttribute("unit");