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

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

public void removeAddress(Address addr){ if (address != null) address.remove(addr);

}

public void addWorkPhone(String phone){

if (workPhone == null) workPhone = new Vector(); workPhone.add(new Integer(phone));

}

public Vector<Integer> getWorkPhone(){ return workPhone; }

public void removeWorkPhone(String phone){

if (workPhone != null) workPhone.remove(new Integer(phone));

}

public void addHomePhone(String phone){

if (homePhone == null) homePhone = new Vector(); homePhone.add(new Integer(phone));

}

public Vector<Integer> getHomePhone(){ return homePhone; }

public void removeHomePhone(String phone){

if (homePhone != null) homePhone.remove(new Integer(phone));

}

public String toString(){

return "Person: " + surname;

}

}

После определения классов Java, в экземпляры которых будет занесено содержимое адресной книжки, напишем программу, читающую адресную книжку и связывающую ее с объектами Java.

В листинге 28.9 приведен пример класса-обработчика NotebookHandler для адресной книжки, описанной в листинге 28.2. Методы класса NotebookHandler анализируют содержимое адресной книжки и помещают его в вектор, составленный из объектов класса Person, описанного в листинге 28.8.

Листинг 28.9. Кпасс-обработник документа XML средствами SAX2

import org.xml.sax.*; import org.xml.sax.helpers.*; import javax.xml.parsers.*; import java.util.*; import java.io.*;

public class NotebookHandler extends DefaultHandler{

static final String JAX P_SCHEMA_LAN GUAGE =

" ava.sun.com/xml/j axp/properties/schemaLanguage";

static final String W3C XML SCHEMA = "";

private Person person; private Address address;

private static Vector<Person> pers = new Vector<>(); boolean inBirthday, inStreet, inCity, inZip, inWorkPhone, inHomePhone;

public void startElement(String uri, String name,

String qname, Attributes attrs)

throws SAXException{ switch (qname){ case "name":

person = new Person(attrs.getValue("first"),

attrs.getValue("second"), attrs.getValue("surname"));

break;

case "birthday":

inBirthday = true; break; case "address":

address = new Address(); break; case "street":

inStreet = true; break; case "city":

inCity = true;

if (attrs != null) address.setType(attrs.getValue("type")); break; case "zip":

inZip = true; break; case "work-phone":

inWorkPhone = true; break; case "home-phone":

inHomePhone = true;

}

public void characters(char[] buf, int offset, int len) throws SAXException{

String s = new String(buf, offset, len);

if (inBirthday){

person.setBirthday(s); inBirthday = false;

}else if (inStreet){

address.setStreet(s); inStreet = false;

}else if (inCity){

address.setCity(s); inCity = false;

}else if (inZip){

address.setZip(s); inZip = false;

}else if (inWorkPhone){ person.addWorkPhone(s); inWorkPhone = false;

}else if (inHomePhone){ person.addHomePhone(s); inHomePhone = false;

}

}

public void endElement(String uri, String name, String qname) throws SAXException{

if (qname.equals("address")){ person.addAddress(address); address = null;

}else if (qname.equals("person")){ pers.add(person); person = null;