Java tutorial
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); } }