SAX
stands for Simple API for XML. SAX parsers operate on each piece of the XML
document sequentially, whereas DOM parsers operates on the document as a whole.
SAX
parser reads an XML document and fires an event whenever element started,
element ends, document started, document ends etc., Because of the event-driven
nature of SAX, processing documents is generally far faster than DOM-style
parsers.
As shown in the figure, you can create
SAXParser object using SAXParserFactory class. The parser wraps a SAXReader
object. When the parser's parse() method is invoked, the reader invokes one of
several callback methods implemented in the application. Those methods are
defined by the interfaces ContentHandler, ErrorHandler, DTDHandler, and
EntityResolver.
Let’s parse below xml file which
contains employee data.
employee.xml
<?xml version="1.0"?> <employees> <employee> <id>1</id> <firstName>Rama Krishna</firstName> <lastName>Gurram</lastName> <salary>100000</salary> </employee> <employee> <id>2</id> <firstName>Murali Krishna</firstName> <lastName>Bachu</lastName> <salary>110000</salary> </employee> <employee> <id>3</id> <firstName>Gopi</firstName> <lastName>Battu</lastName> <salary>55000</salary> </employee> </employees>
Step
1: Create
a handler class, by implementing any of the interfaces EntityResolver,
DTDHandler, ContentHandler, ErrorHandler. For our convenience JAXP provides DefaultHandler
class which provides default implementation for all the handler interfaces.
import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class ContentHandlerEx extends DefaultHandler{ boolean empId = false; boolean empFirstName = false; boolean empLastName = false; boolean empSalary = false; @Override public void startDocument() throws SAXException { System.out.println("Processing of the document started"); } @Override public void endDocument() throws SAXException { System.out.println("Processing of the document finished"); } @Override public void startElement(String uri, String localName, String qName, org.xml.sax.Attributes attributes) throws SAXException { //super.startElement(uri, localName, qName, attributes); System.out.println("Start Element : " + qName); if(qName.equalsIgnoreCase("id")){ empId = true; } if(qName.equalsIgnoreCase("firstName")){ empFirstName = true; } if(qName.equalsIgnoreCase("lastName")){ empLastName = true; } if(qName.equalsIgnoreCase("salary")){ empSalary = true; } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { System.out.println("End Element : " + qName); } @Override public void characters(char[] ch, int start, int length) throws SAXException { if(empFirstName){ System.out.println(new String(ch, start, length)); empFirstName = false; } if(empLastName){ System.out.println(new String(ch, start, length)); empLastName = false; } if(empId){ System.out.println(new String(ch, start, length)); empId = false; } if(empSalary){ System.out.println(new String(ch, start, length)); empSalary = false; } } }
Step
2: Instantiate
parser object and pass the input file and the handler instance to the parse method
of this parser object.
import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; public class EmployeeParser { public static void main(String args[]) throws Exception{ SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser = factory.newSAXParser(); ContentHandlerEx handler = new ContentHandlerEx(); saxParser.parse("D:\\employee.xml", handler); } }
Output
Processing of the document started Start Element : employees Start Element : employee Start Element : id 1 End Element : id Start Element : firstName Rama Krishna End Element : firstName Start Element : lastName Gurram End Element : lastName Start Element : salary 100000 End Element : salary End Element : employee Start Element : employee Start Element : id 2 End Element : id Start Element : firstName Murali Krishna End Element : firstName Start Element : lastName Bachu End Element : lastName Start Element : salary 110000 End Element : salary End Element : employee Start Element : employee Start Element : id 3 End Element : id Start Element : firstName Gopi End Element : firstName Start Element : lastName Battu End Element : lastName Start Element : salary 55000 End Element : salary End Element : employee End Element : employees Processing of the document finished
No comments:
Post a Comment