div.main {margin-left: 20pt; margin-right: 20pt}Java и XML
Поскольку XML достаточно быстро развивается я подумал, что не
плохо было бы и мне узнать об этой технологии, что бы не отстать от жизни. К
моему разочарованию, я нашел множество статей, разъясняющих, что XML делает, для
чего нужна эта технология, но при этом в них было все несколько примеров,
которые помогли мне приступить к изучению XML. Это учебное пособие призвано
устранить данную несправедливость. Причем я не потрачу много времени на теорию
XML, вместо этого я сфокусируюсь на собственно кодировании и реализациях.
Готовы? Ну тогда начнем!
Что такое XML?
Как я и обещал, я буду показывать вам больше примеров и
меньше теории. Поэтому я думаю, что наиболее легким путем ответа на этот вопрос
будет просто некий кусок XML.
<?xml version="1.0"?>
<order>
<item>
<name>Soccer Ball</name>
<price>15.00</price>
<quantity>5</quantity>
</item>
</order>
Похоже на HTML, не правда ли? И действительно, оно выглядит
так же, как и HTML, но в действительности это нечто совсем другое. HTML это язык
разметки, применяемый для форматирования содержания на экране. HTML использует
наборы предопределенных HTML тегов, для того, что бы определить шрифты ,
параграфы, таблицы и т.д. С другой стороны XML, используемый для описания
содержимого, посредством тегов, которые уже кто-то описал, кто знал и понимал
всю структуру документа . Смотря на документ XML приведенный выше, мы с
легкостью можем распознать , что он описывает и определяет каждый свой элемент.
Элементы упорядочены в порядке определения - имя, цена и количество. Поэтому XML
действительно описывает содержимое, в отличие от HTML, только форматирующего
содержимое.
Пока не так трудно разобраться, не так ли? Но по прежнему,
этот документ именно будет разъяснять и показывать, как же конкретно, мы можем
получить данные из XML документа.
Прежде всего, до того, как мы начнем читать XML документ,
нужно решить, какой мы будем использовать парсер для XML. Существует два типа
парсеров, SAX (Simple API for XML - простой API для XML) и DOM (Document Object
Model - объектная модель документа). SAX - событийный парсер XML. Он содержит
очень похожую модель обработки событий на такую же модель в Java. К примеру, в
аплете Вы можете зарегистрировать обработчика события на клик мишкой, а в SAX Вы
можете зарегистрировать обработчик события на начало и конец тегов элементов,
таких как <name> and </name>.
Поскольку большинство из нас знакомо с обработкой событий в
Java, то и приступим к изучению SAX-а, оставив DOM на потом. В этом документе
рассматривается XML парсер производства IBM. Он бесплатен и имеет общедоступные
исходные тексты. Загрузка XML парсера для Java . После загрузки распакуйте
архив и добавьте .jar файлы в ваш CLASSPATH.
Для разбора XML документа используя SAX мы осуществим
несколько шагов. Эта шаги выделены в коде примера.
Регистрация парсера XML
Создание экземпляра XMLReader
Создание экземпляра класса отвечающего за обработку событий SAX-а
Подключение обработчика событий к экземпляру нашего XMLReader-а
Разбор документа посредством передачи XMLReader-у XML файла. (В этом
примере используется файл "order.xml" содержащий XML код приведенный в
начале статьи.) |
В примере, наш класс расширит DefaultHandler. DefaultHandler это
класс-адаптер, который позволит нам обрабатывать только те события SAX-а,
которые нам нужны, а не реализовывать все его события.
package xml;
import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;
public class SimpleSax extends DefaultHandler
{
public static void main(String[] args)
{
try
{
Class c = Class.forName("org.apache.xerces.parsers.SAXParser");
XMLReader reader = (XMLReader)c.newInstance();
SimpleSax ss = new SimpleSax();
reader.setContentHandler(ss);
reader.parse("department.xml");
}
catch(Exception e){System.out.println(e);}
}
public void startElement(String uri, String local_name, String raw_name, Attributes amap)
throws SAXException
{
System.out.println("start " + local_name + " found ");
}
public void endElement(String uri, String local_name, String raw_name)
throws SAXException
{
System.out.println("end " + local_name + " found");
}
public void startDocument() throws SAXException
{
System.out.println("start document");
}
public void endDocument() throws SAXException
{
System.out.println("end document");
}
public void characters(char[] ch, int start, int length)
throws SAXException
{
System.out.println("characters " + new String(ch,start,length) + " found");
}
}
Парсер SAX имеет несколько различных событий, главные из них,
мы и рассмотрим. События, которым мы обработали, определяются следующим образом:
startElement(...) Это событие генерируется каждый
раз, как только обнаруживается стартовый тег элемента.
endElement(...) Данное событие возбуждается при
обнаружении завершающего тега элемента.
characters(...) Такое событие происходит тогда,
когда читается текстовые данные внутри элемента, т.е. текст "Soccer Ball" между
тегами и .
startDocument(...) Это событие генерируется при
распознании стартовой позиции в XML документе, т.е.
endDocument(...) А это событие возникает при
обнаружении закрывающего тега документа XML.
Во время работы этого примера, будет генерироваться множество
событий. В следующей части Вы узнаете немного больше о том, как валидировать наш
XML документ и получите так же немного информации помогающей в обработке SAX
средствами XML документами.
|