Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
85
Добавлен:
08.06.2015
Размер:
712.7 Кб
Скачать

Логика DOM

DOM

Tree

DOM

XML Document

Builder Error

Handler

Entity

Resolver

Document Builder

Factory

Business

Logic

32

Особенности SAX и DOM

SAX

DOM

Модель обработки событий

Древовидная структура данных

Последовательный доступ (поток

Произвольный доступ (структура

событий)

данных в памяти)

Используется мало памяти

Используется много памяти

(порождаются только события)

(документ загружен полностью)

Для обработки частей документа

Для редактирования документа

(обработка релевантных

(обработка данных в памяти)

событий)

 

Для однократной обработки

Для многократной обработки

документа

документа

33

Работа с XML в Java

Стандартные интерфейсы

В оригинале описаны на Interface Definition Language (OMG IDL)

Пакет org.w3c.domПакет org.xml.sax

Реализующие классы

Предоставляются отдельно…

JAVA API for XML Processing (JAXP) Пакет javax.xml

34

Работа с SAX

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

Обработчики должны реализовывать интерфейсы

org.xml.sax.ContentHandler

org.xml.sax.DTDHandler

org.xml.sax.EntityResolver

SAX

org.xml.sax.ErrorHandler

org.xml.sax.Locator

org.xml.sax.ext.DeclHandler

org.xml.sax.ext.EntityResolver2

SAX2

org.xml.sax.ext.LexicalHandler

 

org.xml.sax.ext.Locator2

 

35

Пакет javax.xml.parsers

Класс SAXParserFactory

Образец проектирования Singleton, позволяет настроить и получить экземпляр фабрики для производства SAXParser

Класс SAXParser

Непосредственно транслятор, экземпляры получаются от фабрики

SAXParserFactory

36

Семантика документа

Возникающие

события

startElement / endElement

Открывающий и закрывающий тэг

characters

Символы

startDocument / endDocument

Начало и конец документа

Интерфейс

ContentHandler

startElement()

endElement()

characters()

startDocument()

endDocument()

37

Создание обработчика событий

Реализация нужного интерфейса, настройка на него используемого транслятора

Использование класса

org.xml.sax.helpers.DefaultHandler или

org.xml.sax.helpers.DefaultHandler2

реализующих все интерфейсы обработки событий (все методы имеют пустые тела)

38

Пример. Файл XML

<?xml version="1.0"?>

<company>

<staff>

<firstname>Tom</firstname>

<lastname>King</lastname>

<nickname>Boss</nickname>

<salary>100500</salary>

</staff>

<staff>

<firstname>Ben</firstname>

<lastname>Gum</lastname>

<nickname>Bubble</nickname>

<salary>100000</salary>

</staff>

</company>

39

Пример. Часть 1

import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;

public class ReadXMLFile {

public static void main(String argv[]) { try {

SAXParserFactory factory = SAXParserFactory.newInstance();

SAXParser saxParser = factory.newSAXParser();

DefaultHandler handler = new DefaultHandler() { boolean bfname = false;

boolean blname = false; boolean bnname = false; boolean bsalary = false;

...

40

Пример. Часть 2

public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {

System.out.println("Start Element: " + qName); if (qName.equalsIgnoreCase("FIRSTNAME")) {

bfname = true;

}

if (qName.equalsIgnoreCase("LASTNAME")) { blname = true;

}

if (qName.equalsIgnoreCase("NICKNAME")) { bnname = true;

}

if (qName.equalsIgnoreCase("SALARY")) { bsalary = true;

}

}

...

41

Соседние файлы в папке Лекции