Java and XML tutorial with SAX parser - reading only
Q. What is a SAX Parser and when will you use it?
A. SAX (Simple API for XML) is a stream oriented API like StAX, but
- Unlike StAX, which can read and write, but SAX can only read.
- Unlike StAX, which can't validate schema, SAX can perform schema validation.
SAX works by iterating over the XML and call certain methods on a "handler" object , which listens to events like startDocument, startElement, characters, comments, processing instructions, endElement, and endDocument.
StAX your handler "pulls" the XML events out of the parser.
SAX your parser pushes events into the handler
One major advantage of StAX over SAX is that the pull model allows subparsing of the XML input. You can extract out the element name, then the attributes, and then the characters (i.e. content)
Here is the sample code to read the employee XML.
package com.xml; import java.io.ByteArrayInputStream; import java.io.FileInputStream; import java.io.InputStream; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.helpers.DefaultHandler; public class SaxProcessing { public static void main(String[] args) { SAXParserFactory factory = SAXParserFactory.newInstance(); try { String xml = "<Employee><name type=\"first\">Peter</name><age>25</age></Employee>"; SAXParser saxParser = factory.newSAXParser(); DefaultHandler handler = new SaxHandler(); saxParser.parse(new ByteArrayInputStream(xml.getBytes()), handler); } catch (Throwable err) { err.printStackTrace(); } } }
Now the handler class that gets pushed with the events
package com.xml; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SaxHandler extends DefaultHandler { public void startDocument() throws SAXException { System.out.println("Start document : "); } public void endDocument() throws SAXException { System.out.println("End document : "); } public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { System.out.println("Start element : " + qName); if (qName.equalsIgnoreCase("name")) { String attrName = attributes.getQName(0); String attrValue = attributes.getValue(0); System.out.println("Attribute : " + attrName + "=" + attrValue); } } public void endElement(String uri, String localName, String qName) throws SAXException { System.out.println("End element : " + qName); } public void characters(char ch[], int start, int length) throws SAXException { System.out.println("Start characters : " + new String(ch, start, length)); } }
Output:
Start document : Start element : Employee Start element : name Attribute : type=first Start characters : Peter End element : name Start element : age Start characters : 25 End element : age End element : Employee End document :
Labels: XML
0 Comments:
Post a Comment
Subscribe to Post Comments [Atom]
<< Home