Simple API for XML(SAX) is an event driven parser which reads XML step by step. SAX Parser is faster and uses less memory than DOM parser.
Event handling methods used:
startElement() – Receive notification of the start of an element.
endElement() – Receive notification of the end of an element.
characters() – Receive notification of character data inside an element.
XML document to be parsed
movie_list.xml
< movies >
< movie >
< name > The Terminal </ name >
< image > http: //.../the_terminal.jpg</image>
< description > terminal foo foo foo </ description >
</ movie >
< movie >
< name > Shutter Island </ name >
< image > http: //.../shutter_island.png</image>
< description > shutter foo foo foo </ description >
</ movie >
< movie >
< name > Old Boy </ name >
< image > http: //.../old_boy.gif</image>
< description > old foo foo foo </ description >
</ movie >
</ movies >
Create Model object
Movie.java
public class Movie {
public String getName () {
return name ;
}
public void setName ( String name ) {
this . name = name ;
}
public String getImgURL () {
return imgURL ;
}
public void setImgURL ( String imgURL ) {
this . imgURL = imgURL ;
}
public String getDescription () {
return description ;
}
public void setDescription ( String description ) {
this . description = description ;
}
private String name ;
private String imgURL ;
private String description ;
@Override
public String toString () {
return this . name + & quot ; & quot ; + this . imgURL + & quot ; & quot ; + this . description ;
}
}
Extend DefaultHandler and override above mentioned event handling methods.
MovieHandler.java
public class MovieHandler extends DefaultHandler {
List < Movie > movieList = new ArrayList < Movie >();
Movie movie = null ;
String data = null ;
@Override
public void startElement ( String uri , String localName , String qName ,
Attributes attributes ) throws SAXException {
// When start tag of 'movie' element found, create an object and add it to the list
switch ( qName ) {
case "movie" :
movie = new Movie ();
movieList . add ( movie );
break ;
}
}
@Override
public void endElement ( String uri , String localName , String qName )
throws SAXException {
switch ( qName ) {
case "name" :
movie . setName ( data );
break ;
case "description" :
movie . setDescription ( data );
break ;
case "image" :
movie . setImgURL ( data );
break ;
}
}
@Override
public void characters ( char [] ch , int start , int length )
throws SAXException {
data = String . copyValueOf ( ch , start , length ). trim ();
}
}
Set up the parser and get it started
MovieSaxParser.java
public class MovieSaxParser {
static final Logger LOG = Logger . getLogger ( MovieSaxParser . class );
String static fileLocation = "/home/prnv/movie_list.xml" ;
public static void main ( String [] args ) {
try {
SAXParserFactory saxFactory = SAXParserFactory . newInstance ();
SAXParser parser = saxFactory . newSAXParser ();
MovieHandler handler = new MovieHandler ();
parser . parse ( fileLocation , handler );
for ( Movie movie : handler . movieList ) {
System . out . println ( movie );
}
} catch ( ParserConfigurationException | SAXException | IOException e ) {
LOG . error ( "Exception " , e );
}
}
}