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>
*
*/
|