Mega Code Archive

 
Categories / Java / XML
 

A Content Handler to Output a Sorted List as HTML

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 MyHtmlHandler implements ContentHandler {   private boolean insideNameElement = false;   private boolean insidePhoneElement = false;   private boolean insideEmailElement = false;   private Person person;   private Vector personVec;   private PrintWriter out;   public MyHtmlHandler(PrintWriter out) {     this.out = out;     personVec = new Vector();   }   public void setDocumentLocator(Locator locator) {   }   public void startDocument() {   }   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++;       }     }     out.println("<html>");     out.println("<head>");     out.println("  <title>Persons</title>");     out.println("</head>");     out.println("<body>");     out.println("<center><h1>Persons</h1><center>");     out.println("<hr>");     out.println("<center>");     out.println("<table border cellspacing=0 cellpadding=5>");     out.println("  <caption align=top>");     out.println("    A List of Names with Phone and Email");     out.println("  </caption>");     out.println("  <tr>");     out.println("    <th>Name</th>");     out.println("    <th>Phone</th>");     out.println("    <th>Email</th>");     out.println("  </tr>");     for (int i = 0; i < personVec.size(); i++) {       Person p = (Person) personVec.elementAt(i);       out.println("  <tr>");       out.println("    <td>" + p.getName() + "</td>");       out.println("    <td>" + p.getPhone() + "</td>");       out.println("    <td>" + p.getEmail() + "</td>");       out.println("  </tr>");     }     out.println("</table>");     out.println("</center>");     out.println("</body>");     out.println("</html>");   }   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) {   } } 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>Yin, Wang </name> </person> <person> <phone>704 555-0000  * </phone> <name>Pet, Rob </name> <email>rob@server.com </email> </person>  * </folks>  *    */