Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Псевдособытийная модель






Как уже отмечалось, SAX-анализатор не строит дерево элементов по содержимому XML-файла. Вместо этого анализатор читает файл и генерирует квазисобытие при нахождении элемента, атрибута или текста. На первый взгляд, такой подход менее естествен для приложения, использующего анализатор, так как он не строит дерево, а приложение само должно догадаться, какое дерево элементов описывается в XML-документе.

Однако нужно учитывать, для каких целей используются данные из XML-файла. Очевидно, что нет смысла строить дерево объектов, содержащее десятки тысяч элементов в памяти, если все, что необходимо, — просто посчитать точное количество элементов в файле.

SAX–анализаторы

SAX API определяет ряд интерфейсов, используемых при разборе документа. Чаще других используется org.xml.sax.ContentHandler и некоторые объявленные в нем методы:

void startDocument() — вызывается на старте обработки документа;

void endDocument() — вызывается при завершении разбора документа;

void startElement(String uri, String localName, String qName, Attributes attrs) — будет вызван, когда анализатор полностью обработает содержимое открывающего тега, включая его имя и все содержащиеся атрибуты;

void endElement(String uri, String localName, String qName) — сигнализирует о завершении элемента;

void characters(char[] ch, int start, int length) — вызывается в том случае, если анализатор встретил символьную информацию внутри элемента (тело тега). Если этой информации достаточно много, то метод может быть вызван более одного раза.

Для обработки предупреждений и ошибок, возникающих при разборе XML-документа, применяется интерфейс org.xml.sax.ErrorHandler, содержащий методы:

warning(SAXParseException e),

error(SAXParseException e),

fatalError(SAXParseException e).

В пакете org.xml.sax в SAX2 API содержатся также интерфейсы DTDHandler, DocumentHandler и EntityResolver, которые необходимо реализовать для обработки интересующего события.

Для того, чтобы создать простейшее приложение, обрабатывающее XML-документ, достаточно сделать следующее:

1. Создать класс, который реализует один или несколько интерфейсов

(ContentHandler, ErrorHandler, DTDHandler, EntityResolver, DocumentHandler) или наследует класс org.xml.sax.helpers.DefaultHandler, и реализовать методы, отвечающие за обработку интересующих частей документа или ошибок.

2. Используя SAX2 API, поддерживаемое всеми SAX-парсерами, создать org.

xml.sax.XMLReader, например:

XMLReader reader = XMLReaderFactory.createXMLReader();

или

XMLReader reader =

XMLReaderFactory.createXMLReader(" org.apache.xerces.parsers.SAXParser");

Для библиотеки xercesImpl.jar, которую можно загрузить по адресу https://xerces.apache.org/xerces2-j/.

3. Передать в XMLReader объект класса, созданного на шаге 1 с помощью соответствующих методов: setContentHandler(), setErrorHandler(), setDTDHandler(), setEntityResolver().

4. Вызвать метод parse(String filename) класса XMLReader, которому в качестве параметров передать путь (URI) к анализируемому документу либо InputSource.


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

mylektsii.su - Мои Лекции - 2015-2024 год. (0.01 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал