Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / XML /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Использование Java XML-обработчиков - Программирование от RIN.RU
Использование Java XML-обработчиков



Для демонстрции использования этих методов рассмотрим небольшой пример обработчика регистрационного XML-документа (его структура описана в примере 2 первого раздела статьи). Java-приложение выводит содержимое документа и информацию о его структуре, путь к документу задается в командной строке. Для компилирования потребуется JDK 1.1.4 и классы SAX, находящиеся либо в текущем пакете, либо вместе с другими классами в classes.zip.


import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;


import com.ibm.xml.parsers.DOMParser;


import org.xml.sax.Parser;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.AttributeList;
import org.xml.sax.HandlerBase;
import org.xml.sax.helpers.ParserFactory;


class saxParser extends HandlerBase{


private PrintWriter out;


private int elements;
private int attributes;
private int characters;
private int ignorableWhitespace;
private String url;


public saxParser(String url_str) {


url = url_str;


try {
out = new PrintWriter(new OutputStreamWriter(System.out, "koi8-r"));
}
catch (UnsupportedEncodingException e) {
}


}




//=======================================================
// Обработчики событий. Методы интерфейса DocumentHandler
//========================


// Начало документа
public void startDocument() {


// Статистика
elements = 0;
attributes = 0;
characters = 0;
ignorableWhitespace = 0;




// Процессорные инструкции


out.println(" encoding=\"UTF-8\"?>");


}


// Конец документа
public void endDocument() {


out.flush();


}


// Встретился открывающий тэг элемента //


public void startElement(String name, AttributeList attrs) {


elements++;
if (attrs != null) {
attributes += attrs.getLength();
}


// Печать тэга элемента вместе со списком его атрибутов,
// например,
out.print("<");
out.print(name);
if (attrs != null) {
int len = attrs.getLength();
for (int i = 0; i < len; i++) {
out.print(" ");
out.print(attrs.getName(i));
out.print("=\"");
out.print(attrs.getValue(i));
out.print(""");
}
}
out.println(">");




}




// Встретился закрывающий тэг элемента


public void endElement(String name) {


out.println("");


}


// Текстовые символы


public void characters(char ch[], int start, int length) {


characters += length;


out.println(new String(ch, start, length));


}


// Необрабатываемые символы(например, содержимое секции CDATA)


public void ignorableWhitespace(char ch[], int start, int length) {


characters(ch, start, length);


}


// Инструкции XML-процессору


public void processingInstruction (String target, String data) {


out.print(" out.print(target);
if (data != null && data.length() > 0) {
out.print(" ");
out.print(data);
}
out.print("?>");


}


//===================================================
// Методы интерфейса ErrorHandler
//===============================


// Последнее предупреждение
public void warning(SAXParseException ex) {
System.err.println("Warning at "+
ex.getLineNumber()+" . "+
ex.getColumnNumber()+" - "+
ex.getMessage());
}


// Произошла ошибка
public void error(SAXParseException ex) {
System.err.println("Error at {"+
ex.getLineNumber()+" . "+
ex.getColumnNumber()+" - "+
ex.getMessage());
}


// Такие ошибки исправить уже нельзя
public void fatalError(SAXParseException ex) throws SAXException {
System.err.println("Fatal error at {"+
ex.getLineNumber()+" . "+
ex.getColumnNumber()+" - "+
ex.getMessage());
throw ex;
}


//=======================================================
// Вывести информацию о документе
//===============================


public void printInfo() {


System.out.println();


System.out.println("Документ "+url+" был успешно обработан");


System.out.println("Элементов : "+elements);
System.out.println("Атрибутов : "+attributes);
System.out.println("Символов : "+characters);


}


}


//=======================================================
// Обработка XML документа
//========================


public class saxSample{


public static void main(String argv[]) {


try {
saxParser sample = new saxParser(argv[0]);


Parser parser = ParserFactory.makeParser("com.ibm.xml.parsers.SAXParser");
parser.setDocumentHandler(sample);
parser.setErrorHandler(sample);


parser.parse(argv[0]);
sample.printInfo();
}
catch (Exception e) {
e.printStackTrace(System.err);
}


}


}




Комментарии


Первым шагом в процессе построения XML-обработчика является создание объекта из класса анализатора (в нашем случае это классы из паекета com.ibm.xml.parsers). Для этого можно использовать класс ParserFactory, входящий в org.xml.sax.helpers:


import org.xml.sax.*;
...
Parser parser = ParseFactory.createParser();
...


Затем следует определить обработчики возникающих в процессе разбора XML-документа событий. Приложению необязательно устанавливать все обработчики сразу - в классе HandlerBase все события могут обрабатываться "по умолчанию". Более подробную информацию по использованию SAX-анализаторов можно найти в примерах приложений в пакетах анализатора или на сервере www.megginson.com. Комментарии, файлы приложений и результатов их работы можно найти по адресу www.mrcpk.nstu.ru/xml/

<<<  Назад
 1  2 


 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Для чего нужен новый язык разметки?

Как выглядит XML-документ?

Правила создания XML- документа

Конструкции языка

Приложение 1. Пример XML-документа

Описание технологии

Просмотр XML - документов

Приложение 2. JavaScript сценарий, обрабатывающий XML-документ, приведенный в приложении 1

Стилевые таблицы XSL

DTD - определения

Схемы данных

XML в Microsoft Internet Explorer 5.0

DOM совместимые анализаторы

Приложение 3. Пример XSL-документа

Приложение 4. DTD-определения для XML-документа приложения 1

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь