Лекции.Орг


Поиск:




Категории:

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

 

 

 

 


XMLReaderFactory.createXMLReader(




“org.apache.xerces.parsers.SAXParser”);

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

setContentHandler(), setErrorHandler(),

setDTDHandler(), setEntityResolver().

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

Следующий пример выводит на консоль содержимое XML-документа.

/* пример # 1: чтение и вывод XML-документа: SimpleHandler.java */

package chapt16.analyzer.sax;

import org.xml.sax.ContentHandler;

import org.xml.sax.Attributes;

 

public class SimpleHandler implements ContentHandler {

 

public void startElement(String uri, String localName,

String qName, Attributes attrs) {

String s = qName;

//получение и вывод информации об атрибутах элемента

for (int i = 0; i < attrs.getLength(); i++) {

s += " " + attrs.getQName(i) + "="

+ attrs.getValue(i) + " ";

}

System. out. print(s.trim());

}

public void characters(char [] ch,

int start, int length) {

System.out.print(new String(ch, start, length));

}

public void endElement(String uri,

String localName, String qName) {

System. out. print(qName);

}

}

/* пример # 2: создание и запуск парсера: SAXSimple.java*/

package chapt16.main;

Import org.xml.sax.XMLReader;

Import org.xml.sax.XMLReaderFactory;

import org.xml.sax.SAXException;

import javax.xml.parsers.ParserConfigurationException;

import java.io.IOException;

import chapt16.analyzer.sax.SimpleHandler;

 

public class SAXSimple {

public static void main(String[] args) {

try {

//создание SAX-анализатора

XMLReader reader = XMLReaderFactory.createXMLReader();

SimpleHandler contentHandler = new SimpleHandler();

reader.setContentHandler(contentHandler);

reader.parse("students.xml");

} catch (SAXException e) {

e.printStackTrace();

System. out. print("ошибка SAX парсера");

} catch (ParserConfigurationException e) {

e.printStackTrace();

System. out. print("ошибка конфигурации");

} catch (IOException e) {

e.printStackTrace();

System. out. print("ошибка I/О потока");

}

}

}

В результате в консоль будет выведено (если убрать из XML-документа ссылку на DTD):

Students

student login=mit faculty=mmf

Name Mitar Alex name

Telephone 2456474 telephone

Address

Country Belarus country

City Minsk city

Street Kalinovsky 45 street

Address

Student

student login=pus faculty=mmf

Name Pashkun Alex name

Telephone 3453789 telephone

Address

Country Belarus country

City Brest city

Street Knorina 56 street

Address

Student

Students

В следующем приложении производятся разбор документа students.xml и инициализация на его основе коллекции объектов класса Student.

/* пример # 3: формирование коллекции объектов на основе XML-документа: StudentHandler.java */

package chapt16.analyzer.sax;

 

enum StudentEnum {

NAME, TELEPHONE, STREET, CITY, COUNTRY

}

package chapt16.analyzer.sax;

import org.xml.sax.Attributes;

import org.xml.sax.ContentHandler;

import java.util.ArrayList;

import chapt16.entity.Student;

 

public class StundentHandler implements ContentHandler {

ArrayList<Student> students = new ArrayList<Student>();

Student curr = null;

StudentEnum currentEnum = null;

 

public ArrayList<Student> getStudents() {

return students;

}

public void startDocument() {

System.out.println("parsing started");

}

public void startElement(String uri, String localName,

String qName, Attributes attrs) {

if (qName.equals("student")) {

curr = new Student();

curr.setLogin(attrs.getValue(0));

curr.setFaculty(attrs.getValue(1));

}

if (!"address".equals(qName) &&

!"student".equals(qName) &&

!qName.equals("students"))

currentEnum =

StudentEnum.valueOf(qName.toUpperCase());

}

public void endElement(String uri, String localName,

String qName) {

if (qName.equals("student"))

students.add(curr);

currentEnum = null;

}

public void characters(char [] ch, int start,

int length) {

String s = new String(ch, start, length).trim();

if (currentEnum == null) return;

switch (currentEnum) {

case NAME:

curr.setName(s);

break;

case TELEPHONE:

curr.setTelephone(s);

break;

case STREET:

curr.getAddress().setStreet(s);

break;

case CITY:

curr.getAddress().setCity(s);

break;

case COUNTRY:

curr.getAddress().setCountry(s);

break;

}

}

}

/* пример # 4: создание и запуск парсера: SAXStudentMain.java */

package chapt16.main;





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


Дата добавления: 2016-04-03; Мы поможем в написании ваших работ!; просмотров: 434 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Бутерброд по-студенчески - кусок черного хлеба, а на него кусок белого. © Неизвестно
==> читать все изречения...

2464 - | 2389 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.