Читать «Java 7 (Наиболее полное руководство)» онлайн - страница 473

Ильдар Шаукатович Хабибуллин

При появлении в тексте документа инструкции по обработке вызывается метод

public void processingInstruction(String target, String data);

В метод передается имя программы-обработчика target и дополнительные сведения

data.

При появлении пробельных символов, которые должны быть пропущены, вызывается метод

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

В него передается массив ch идущих подряд пробельных символов, индекс начала символов в массиве start и количество символов length.

Интерфейс org.xml.sax.ContentHandler реализован классом org.xml.sax.helpers.DefaultHandler. В нем сделана пустая реализация всех методов. Разработчику остается реализовать только те методы, которые ему нужны.

Применим методы SAX2 для обработки нашей адресной книжки. Запись документа на языке XML удобна для выявления структуры документа, но неудобна для работы с документом в объектно-ориентированной среде. Поэтому чаще всего содержимое документа XML представляется в виде одного или нескольких объектов, называемых объектами данных JDO (Java Data Objects). Эта операция называется связыванием данных (data binding) с объектами JDO.

Свяжем содержимое нашей адресной книжки с объектами Java. Для этого сначала опишем классы Java (листинги 28.7 и 28.8), которые представят содержимое адресной книги.

Листинг 28.7. Класс, описывающий адрес

public class Address{

private String street, city, zip, type = "город"; public Address(){}

public String getStreet(){ return street; }

public void setStreet(String street){ this.street = street; }

public String getCity(){ return city; }

public void setCity(String city){ this.city = city; }

public String getZip(){ return zip; }

public void setZip(String zip){ this.zip = zip; }

public String getType(){ return type; }

public void setType(String type){ this.type = type; }

public String toString(){

return "Address: " + street + " " + city + " " + zip;

}

Листинг 28.8. Класс, описывающий запись адресной книжки

public class Person{

private String firstName, secondName, surname, birthday; private Vector<Address> address; private Vector<Integer> workPhone; private Vector<Integer> homePhone;

public Person(){}

public Person(String firstName, String secondName, String surname){ this.firstName = firstName; this.secondName = secondName; this.surname = surname;

}

public String getFirstName(){ return firstName; } public void setFirstName(String firstName){ this.firstName = firstName;

}

public String getSecondName(){ return secondName; } public void setSecondName(String secondName){ this.secondName = secondName;

}

public String getSurname(){ return surname; } public void setSurname(String surname){ this.surname = surname;

}

public String getBirthday(){ return birthday; } public void setBirthday(String birthday){ this.birthday = birthday;

}

public void addAddress(Address addr){

if (address == null) address = new Vector(); address.add(addr);

}

public Vector<Address> getAddress(){ return address; }