Mega Code Archive

 
Categories / Java Tutorial / XML
 

A Content Handler to Output a Sorted List

/* Code revised from Java, XML, and JAXP by Arthur Griffith John Wiley & Sons 2002 */ import java.io.IOException; import java.io.PrintWriter; import java.util.Vector; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.ContentHandler; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.Locator; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; import org.xml.sax.XMLReader; public class MappingContentHandler {   static public void main(String[] arg) {     try {       SAXParserFactory spf = SAXParserFactory.newInstance();       SAXParser parser = spf.newSAXParser();       XMLReader reader = parser.getXMLReader();       reader.setErrorHandler(new MyErrorHandler());       MyTextHandler duper = new MyTextHandler();       reader.setContentHandler(duper);       InputSource is = new InputSource("person.xml");       reader.parse(is);     } catch (SAXException e) {       System.out.println(e);     } catch (ParserConfigurationException e) {       System.err.println(e);       System.exit(1);     } catch (IOException e) {       System.err.println(e);       System.exit(1);     }   } } class MyErrorHandler implements ErrorHandler {   public void warning(SAXParseException e) throws SAXException {     show("Warning", e);     throw (e);   }   public void error(SAXParseException e) throws SAXException {     show("Error", e);     throw (e);   }   public void fatalError(SAXParseException e) throws SAXException {     show("Fatal Error", e);     throw (e);   }   private void show(String type, SAXParseException e) {     System.out.println(type + ": " + e.getMessage());     System.out.println("Line " + e.getLineNumber() + " Column " + e.getColumnNumber());     System.out.println("System ID: " + e.getSystemId());   } } class MyTextHandler implements ContentHandler {   private boolean insideNameElement = false;   private boolean insidePhoneElement = false;   private boolean insideEmailElement = false;   private Person person;   private Vector<Person> personVec;   public MyTextHandler() {       personVec = new Vector<Person>();   }   public void setDocumentLocator(Locator locator) {   }   public void startDocument() {   }   public void endDocument() {       for(int i=0; i<personVec.size(); i++) {           Person p = (Person)personVec.elementAt(i);           System.out.println(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(qName.equals("person")) {           person = new Person();       } else if(qName.equals("name")) {           insideNameElement = true;       } else if(qName.equals("phone")) {           insidePhoneElement = true;       } else if(qName.equals("email")) {           insideEmailElement = true;       }   }   public void endElement(String namespaceURI,String localName,           String qName) {       if(qName.equals("person")) {           if(person != null){               personVec.addElement(person);           }       } else if(qName.equals("name")) {           insideNameElement = false;       } else if(qName.equals("phone")) {           insidePhoneElement = false;       } else if(qName.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);   } } //File: person.xml <?xml version="1.0" standalone="yes"?> <folks>     <person>         <phone>999 555-8888</phone>         <email>e@yoursite.net</email>         <name>R, L</name>     </person>     <person>         <phone>333 555-9910</phone>         <name>V, R</name>         <email>rv@yoursite.com</email>     </person>     <person>         <name>B, D.</name>         <email>b@xyz.net</email>     </person>     <person>         <phone>502 555-2192</phone>         <name>B, M</name>     </person> </folks> R, L 999 555-8888 e@yoursite.net V, R 333 555-9910 rv@yoursite.com B, D. none b@xyz.net B, M 502 555-2192 none