Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Псевдособытийная модель
Как уже отмечалось, 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.
|