If you only have one or two xmls to handle in your system, it's quick and simple.
import java.io.ByteArrayInputStream;
import java.io.CharArrayWriter;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;
public class MyParser {
public static void main(String... args) {
String xml = "<root>" +
"<employee><name>David</name><phone>1234</phone></employee>"+
"<employee><name>Luke</name><phone>9998</phone></employee>"+
"<employee><name>Mark</name><phone>5678</phone></employee>"+
"</root>";
MyParser parser = new MyParser();
List result = parser.parse(new ByteArrayInputStream(xml.getBytes()));
for(Employee e : result){
System.out.println(e);
}
}
public List parse(InputStream inputStream) {
try {
XMLReader xmlReader = XMLReaderFactory.createXMLReader();
EmployeeHandler handler = new EmployeeHandler();
xmlReader.setContentHandler(handler);
xmlReader.parse(new InputSource(inputStream));
return handler.getEmployeeList();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
private class EmployeeHandler extends DefaultHandler {
private CharArrayWriter contents = new CharArrayWriter();
private List employeeList = new ArrayList();
private String ename;
private String ephone;
public List getEmployeeList() {
return employeeList;
}
@Override
public void startElement(String uri, String localName, String name,
Attributes attributes) throws SAXException {
contents.reset();
}
@Override
public void endElement(String uri, String localName, String name) throws SAXException {
if ("name".equals(localName)) {
ename = contents.toString();
return;
}
if ("phone".equals(localName)) {
ephone = contents.toString();
return;
}
if("employee".equals(localName)){
Employee e = new Employee();
e.setName(ename);
e.setPhone(ephone);
employeeList.add(e);
return;
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
contents.write(ch, start, length);
}
}
}
Employee POJO
class Employee {
private String name;
private String phone;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String toString(){
return ToStringBuilder.reflectionToString(this);
}
}