Mega Code Archive

 
Categories / Java / XML
 

A Content Handler to Output a Sorted List

import java.io.PrintWriter; import java.util.Vector; import org.xml.sax.Attributes; import org.xml.sax.ContentHandler; import org.xml.sax.Locator; public class MyTextHandler implements ContentHandler {   private boolean insideNameElement = false;   private boolean insidePhoneElement = false;   private boolean insideEmailElement = false;   private Person person;   private Vector personVec;   private PrintWriter out;   public MyTextHandler(PrintWriter out) {     this.out = out;     personVec = new Vector();   }   public void setDocumentLocator(Locator locator) {   }   public void startDocument() {     putCols(" name", " phone", " email");     putCols(" ----", " -----", " -----");   }   public void endDocument() {     int k1 = 1;     while (k1 < personVec.size()) {       int k0 = k1 - 1;       Person p0 = (Person) personVec.elementAt(k0);       Person p1 = (Person) personVec.elementAt(k1);       if (p0.getName().compareTo(p1.getName()) > 0) {         personVec.setElementAt(p0, k1);         personVec.setElementAt(p1, k0);         if (k1 > 1)           k1--;       } else {         k1++;       }     }     for (int i = 0; i < personVec.size(); i++) {       Person p = (Person) personVec.elementAt(i);       putCols(p.getName(), p.getPhone(), p.getEmail());     }   }   public void startPrefixMapping(String prefix, String uri) {   }   public void endPrefixMapping(String prefix) {   }   public void startElement(String namespaceURI, String localName,       String qName, Attributes atts) {     if (localName.equals("person")) {       person = new Person();     } else if (localName.equals("name")) {       insideNameElement = true;     } else if (localName.equals("phone")) {       insidePhoneElement = true;     } else if (localName.equals("email")) {       insideEmailElement = true;     }   }   public void endElement(String namespaceURI, String localName, String qName) {     if (localName.equals("person")) {       if (person != null)         personVec.addElement(person);     } else if (localName.equals("name")) {       insideNameElement = false;     } else if (localName.equals("phone")) {       insidePhoneElement = false;     } else if (localName.equals("email")) {       insideEmailElement = false;     }   }   public void characters(char[] ch, int start, int length) {     String str = "";     for (int i = start; i < start + length; i++)       str += ch[i];     if (insideNameElement)       person.setName(str);     else if (insidePhoneElement)       person.setPhone(str);     else if (insideEmailElement)       person.setEmail(str);   }   public void ignorableWhitespace(char[] ch, int start, int length) {   }   public void processingInstruction(String target, String data) {   }   public void skippedEntity(String name) {   }   private void putCols(String col1, String col2, String col3) {     String lout = col1;     while (lout.length() < 25)       lout += " ";     lout += col2;     while (lout.length() < 50)       lout += " ";     lout += col3;     out.println(lout);   } } // A Class for Holding Person Information class Person {   private String name = null;   private String phone = null;   private String email = null;   public void setName(String value) {     name = value;   }   public void setPhone(String value) {     phone = value;   }   public void setEmail(String value) {     email = value;   }   public String getName() {     if (name == null)       return ("none");     return (name);   }   public String getPhone() {     if (phone == null)       return ("none");     return (phone);   }   public String getEmail() {     if (email == null)       return ("none");     return (email);   } } //Example XML document /*  An XML Document Containing a Simple Contact List Start example <?xml version="1.0" standalone="yes"?> <folks>     <person>         <phone>306 555-9999</phone>         <email>joe@webserver.net</email>         <name>Wang, Joe</name>     </person>     <person>         <phone>704 555-0000</phone>         <name>Pet, Rob</name>         <email>rob@server.com</email>     </person> </folks> */