Читать «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;