How to read XML file in Java using SAX Parser
read
xml
SAX parser
java
In this tutorial will use the output from How to create XML file in java using DOM tutorial plus adding a few more elements.
XML file
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<users>
<user id="100">
<name>John Doe</name>
<email>john.doe@example.com</email>
</user>
<user id="200">
<name>Richard Bo</name>
<email>richard.bo@example.com</email>
</user>
<user id="300">
<name>Ant Sam</name>
<email>ant.sam@example.com</email>
</user>
</users>
Code
package com.admfactory.xml;
import java.util.HashMap;
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 XMLSaxReader {
public static void main(String[] args) {
try {
System.out.println("XML Parser using SAXParser Example");
System.out.println();
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
/** defining the custom handler */
DefaultHandler handler = new DefaultHandler() {
HashMap<String, Boolean> elements = new HashMap<String, Boolean>();
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println("Start Element :" + qName);
/** storing the fact that the element has started */
elements.put(qName, true);
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
System.out.println("End Element :" + qName);
/** this section is just to add some space in the console print out */
if (qName.equalsIgnoreCase("user")) {
System.out.println();
}
}
@Override
public void characters(char[] characters, int start, int length) throws SAXException {
if (elements.containsKey("name") && elements.get("name")) {
System.out.println("Name: " + new String(characters, start, length));
elements.put("name", false);
}
if (elements.containsKey("email") && elements.get("email")) {
System.out.println("Email: " + new String(characters, start, length));
elements.put("email", false);
}
}
};
saxParser.parse("d:\\admfactory.com\\users.xml", handler);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Output
XML Parser using SAXParser Example
Start Element :users
Start Element :user
Start Element :name
Name: John Doe
End Element :name
Start Element :email
Email: john.doe@example.com
End Element :email
End Element :user
Start Element :user
Start Element :name
Name: Richard Bo
End Element :name
Start Element :email
Email: richard.bo@example.com
End Element :email
End Element :user
Start Element :user
Start Element :name
Name: Ant Sam
End Element :name
Start Element :email
Email: ant.sam@example.com
End Element :email
End Element :user
End Element :users