📘 Premium Read: Access my best content on Medium member-only articles — deep dives into Java, Spring Boot, Microservices, backend architecture, interview preparation, career advice, and industry-standard best practices.
🎓 Top 15 Udemy Courses (80-90% Discount): My Udemy Courses - Ramesh Fadatare — All my Udemy courses are real-time and project oriented courses.
▶️ Subscribe to My YouTube Channel (176K+ subscribers): Java Guides on YouTube
▶️ For AI, ChatGPT, Web, Tech, and Generative AI, subscribe to another channel: Ramesh Fadatare on YouTube
SAX
SAX (Simple API for XML) is an event-driven algorithm for parsing XML documents. SAX is an alternative to the Document Object Model (DOM). Where the DOM reads the whole document to operate on XML, SAX parsers read XML node by node, issuing parsing events while making a step through the input stream. SAX processes documents state-independently (the handling of an element does not depend on the elements that came before). SAX parsers are read-only.SAX parsers are faster and require less memory. On the other hand, DOM is easier to use and there are tasks, such as sorting elements, rearranging elements or looking up elements, that are faster with DOM.
A SAX parser comes with JDK, so there is no need to download a dependency.
Development Process Steps
- Input sax_users.xml File(XML file we will read)
- Create SAX Parser Handler class extending DefaultHandler class
- Create User class (populate XML data into User object)
- Program to Read XML File in Java using Java DOM Parser
1. Input users.xml File(XML file we will read)
<?xml version="1.0" encoding="UTF-8"?>
<Users>
<User id= "1">
<firstName>Ramesh</firstName>
<lastName>Fadatare</lastName>
<age>28</age>
<gender>Male</gender>
</User>
<User id= "2">
<firstName>John</firstName>
<lastName>Cena</lastName>
<age>45</age>
<gender>Male</gender>
</User>
<User id= "3">
<firstName>Tom</firstName>
<lastName>Cruise</lastName>
<age>40</age>
<gender>Male</gender>
</User>
</Users>
2. Create SAX Parser Handler class extending DefaultHandler class
package net.javaguides.javaxmlparser.sax;
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class UserHandler extends DefaultHandler {
private boolean hasFirstName = false;
private boolean hasLastName = false;
private boolean hasAge = false;
private boolean hasGender = false;
// List to hold Users object
private List < User > userList = null;
private User user = null;
// getter method for userloyee list
public List < User > getEmpList() {
return userList;
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if (qName.equalsIgnoreCase("User")) {
// create a new User and put it in Map
String id = attributes.getValue("id");
// initialize User object and set id attribute
user = new User();
user.setId(Integer.parseInt(id));
// initialize list
if (userList == null)
userList = new ArrayList < > ();
} else if (qName.equalsIgnoreCase("firstName")) {
// set boolean values for fields, will be used in setting User variables
hasFirstName = true;
} else if (qName.equalsIgnoreCase("age")) {
hasAge = true;
} else if (qName.equalsIgnoreCase("gender")) {
hasGender = true;
} else if (qName.equalsIgnoreCase("lastName")) {
hasLastName = true;
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if (qName.equalsIgnoreCase("User")) {
// add User object to list
userList.add(user);
}
}
@Override
public void characters(char ch[], int start, int length) throws SAXException {
if (hasAge) {
// age element, set User age
user.setAge(Integer.parseInt(new String(ch, start, length)));
hasAge = false;
} else if (hasFirstName) {
user.setFirstName(new String(ch, start, length));
hasFirstName = false;
} else if (hasLastName) {
user.setLastName(new String(ch, start, length));
hasLastName = false;
} else if (hasGender) {
user.setGender(new String(ch, start, length));
hasGender = false;
}
}
}
3. Create User class (populate XML data into User object)
package net.javaguides.javaxmlparser.sax;
public class User {
private int id;
private String firstName;
private String lastName;
private int age;
private String gender;
public int getId() {
return id;
}
public void setId(int i) {
this.id = i;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "User [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", age=" + age + ", gender=" +
gender + "]";
}
}
4. Program to Read XML File in Java using Java SAX Parser
package net.javaguides.javaxmlparser.sax;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
public class ReadXMLSAXParser {
public static void main(String[] args) {
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
try {
SAXParser saxParser = saxParserFactory.newSAXParser();
UserHandler handler = new UserHandler();
saxParser.parse(new File("sax_users.xml"), handler);
// Get Users list
List < User > userList = handler.getEmpList();
// print user information
for (User user: userList)
System.out.println(user);
} catch (ParserConfigurationException | SAXException | IOException e) {
e.printStackTrace();
}
}
}
User [id=1, firstName=Ramesh, lastName=Fadatare, age=28, gender=Male]
User [id=2, firstName=John, lastName=Cena, age=45, gender=Male]
User [id=3, firstName=Tom, lastName=Cruise, age=40, gender=Male]
Comments
Post a Comment
Leave Comment