Java XML Parsing Using SAX
To Parse XML document using SAX parser method you need to follow the following steps.
Consider the following XML file
Students.xml
<?xml version="1.0" encoding="UTF-8"?> <Students> <Student type="regular"> <Name>Joe</Name> <RollNo>21</RollNo> <Age>25</Age> </Student> <Student type="open"> <Name>Ramson</Name> <RollNo>23</RollNo> <Age>24</Age> </Student> </Students>
1. At first Create the SAX Parser as
// getting SAXParserFactory instance SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); // Getting SAXParser object from AXParserFactory instance SAXParser saxParser = saxParserFactory.newSAXParser(); // Parsing XML Document by calling parse method of SAXParser class saxParser.parse("C:\\Students.xml", this);
2. Override the startElement() methods of DefaultHandler
@Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { value = ""; if (qName.equalsIgnoreCase("Student")) { System.out.print(attributes.getValue("type") + "\t"); } }
3. Override the characters() methods of DefaultHandler
public void characters(char[] ch, int start, int length) throws SAXException { value = new String(ch, start, length); }
4. Override the endElement() methods of DefaultHandler
public void endElement(String uri, String localName, String qName) throws SAXException { if (qName.equalsIgnoreCase("Name")) { System.out.print(value + "\t"); } }
A complete java class is given below based on above explanation
XmlParsingUsingSax.java
package net.roseindia; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class XmlParsingUsingSax extends DefaultHandler { private String value; public static void main(String[] args) { System.out.println("Type\tName\tRollNo\tAge\n"); new XmlParsingUsingSax().parseXmlDocument(); } public void parseXmlDocument() { try { // getting SAXParserFactory instance SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); // Getting SAXParser object from AXParserFactory instance SAXParser saxParser = saxParserFactory.newSAXParser(); // Parsing XML Document by calling parse method of SAXParser class saxParser.parse("C:\\Students.xml", this); } catch (Exception e) { e.printStackTrace(); } } // Overriding characters() method of DefaultHandler class @Override public void characters(char[] ch, int start, int length) throws SAXException { value = new String(ch, start, length); } // Overriding startElement() method of DefaultHandler class @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { value = ""; if (qName.equalsIgnoreCase("Student")) { System.out.print(attributes.getValue("type") + "\t"); } } // Overriding endElement() method of DefaultHandler class @Override public void endElement(String uri, String localName, String qName) throws SAXException { if (qName.equalsIgnoreCase("Name")) { System.out.print(value + "\t"); } if (qName.equalsIgnoreCase("RollNo")) { System.out.print(value + "\t"); } if (qName.equalsIgnoreCase("Age")) { System.out.print(value + "\n"); } } }
When you run this application it will display message as shown below:
Type Name RollNo Age regular Joe 21 25 open Ramson 23 24 |