import java.io.StringReader; import java.util.Vector; 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 Main { public static void main(String args[]) throws Exception { SAXParserFactory spf = SAXParserFactory.newInstance(); XMLReader reader = null; SAXParser parser = spf.newSAXParser(); reader = parser.getXMLReader(); reader.setErrorHandler(new MyErrorHandler()); reader.setContentHandler(new MyTextHandler()); StringReader sr = new StringReader("<folks><person><phone>502 555-2192</phone><name>B, M</name></person></folks>"); //InputSource is = new InputSource("xmlFileName.xml"); InputSource is = new InputSource(sr); reader.parse(is); } } 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); } }