Table of contents
1.
Introduction
2.
XML File Used for Examples
3.
Parsing a Text String
4.
Types of XML Parsers
4.1.
1. DOM (Document Object Model) Parser
4.1.1.
Features
4.1.2.
Use Cases
4.1.3.
Pros and Cons
4.1.4.
Example
4.2.
2. Simple API for XML (SAX) Parser
4.2.1.
Features
4.2.2.
Use Cases
4.2.3.
Pros and Cons
4.2.4.
Example
4.3.
3. StAX (Streaming API for XML) Parser
4.3.1.
Features
4.3.2.
Use Cases
4.3.3.
Pros and Cons
4.3.4.
Example
4.4.
4. JAXB (Java Architecture for XML Binding)
4.4.1.
Features
4.4.2.
Pros and Cons
4.4.3.
Example
5.
The XMLHttpRequest Object
6.
Frequently Asked Questions
6.1.
Which XML parser is best for large files?
6.2.
What is the difference between DOM and SAX parsers?
6.3.
Can JAXB handle all XML structures?
7.
Conclusion
Last Updated: Jan 3, 2025
Easy

XML Parser

Author Pallavi singh
0 upvote
Career growth poll
Do you think IIT Guwahati certified course can help you in your career?

Introduction

An XML Parser is a tool or software library used to read, process, and interpret XML (eXtensible Markup Language) documents. It helps convert the XML data into a format that can be easily understood and manipulated by applications. XML parsers play a crucial role in web development, data exchange, and configuration management by ensuring that XML data is accurately processed and utilized.

XML Parser

This article explains different types of XML parsers in Java, their features, use cases, pros and cons, and examples. 

XML File Used for Examples

Below is a sample XML file that will be used throughout this article:

<?xml version="1.0" encoding="UTF-8"?>
<library>
    <book>
        <title>Java Programming</title>
        <author>John Doe</author>
        <price>29.99</price>
    </book>
    <book>
        <title>Python Basics</title>
        <author>Jane Doe</author>
        <price>24.99</price>
    </book>
</library>

Parsing a Text String

To parse a string of XML data, you first need to create an XML parser object. In JavaScript, this is done using the DOMParser object. Let’s look at a basic example of parsing an XML string:

let xmlString = "<book><title>The Great Gatsby</title><author>F. Scott Fitzgerald</author></book>";
let parser = new DOMParser();
let xmlDoc = parser.parseFromString(xmlString, "application/xml");
let bookTitle = xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;
let bookAuthor = xmlDoc.getElementsByTagName("author")[0].childNodes[0].nodeValue;
console.log(bookTitle);
console.log(bookAuthor); 

 

Output: 

The Great Gatsby 
F. Scott Fitzgerald


In this code, we first define a string containing some simple XML data. We then create a new DOMParser object & use its parseFromString method to parse the XML string. This returns an XMLDocument object that we can traverse & extract data from using standard DOM methods like getElementsByTagName.

We retrieve the text content of the <title> & <author> elements by accessing their childNodes property & nodeValue. Finally, we log the extracted values to the console.

Note: This is a very basic example, but it shows the basic process of parsing an XML string in JavaScript. In the real world, you'd be working with more complex XML structures & may need to use more advanced techniques to efficiently locate & extract the data you need.

Types of XML Parsers

1. DOM (Document Object Model) Parser

Features

  • Loads the entire XML file into memory as a tree structure.
     
  • Allows random access to nodes in the XML document.
     
  • Suitable for small to medium-sized XML files.

Use Cases

  • Ideal when you need to access or modify any part of the XML file multiple times.

Pros and Cons

Pros:

  • Provides flexibility in navigating the XML structure.
     
  • Easy to use for complex manipulations.

Cons:

  • High memory consumption for large XML files.
     
  • Slower compared to other parsers for large datasets.

Example

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.*;

public class DOMParserExample {
    public static void main(String[] args) {
        try {
            // Load the XML file
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document document = builder.parse("library.xml");


            // Normalize the XML structure
            document.getDocumentElement().normalize();

            // Get all books
            NodeList bookList = document.getElementsByTagName("book");

            for (int i = 0; i < bookList.getLength(); i++) {
                Node node = bookList.item(i);


                if (node.getNodeType() == Node.ELEMENT_NODE) {
                    Element book = (Element) node;

                    // Print book details
                    System.out.println("Title: " + book.getElementsByTagName("title").item(0).getTextContent());
                    System.out.println("Author: " + book.getElementsByTagName("author").item(0).getTextContent());
                    System.out.println("Price: $" + book.getElementsByTagName("price").item(0).getTextContent());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


Output:

Title: Java Programming  
Author: John Doe  
Price: $29.99  
Title: Python Basics  
Author: Jane Doe  
Price: $24.99  

2. Simple API for XML (SAX) Parser

Features

  • Processes XML documents sequentially, node by node.
     
  • Does not load the entire document into memory.

Use Cases

  • Best for reading large XML files where only certain parts are needed.

Pros and Cons

Pros:

  • Low memory usage.
     
  • Faster for large files.

Cons:

  • Cannot navigate backward.
     
  • More complex to implement compared to DOM.

Example

import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
public class SAXParserExample {
    public static void main(String[] args) {
        try {
            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser saxParser = factory.newSAXParser();


            DefaultHandler handler = new DefaultHandler() {
                boolean isTitle = false;


                @Override
                public void startElement(String uri, String localName, String qName, Attributes attributes) {
                    if (qName.equalsIgnoreCase("title")) {
                        isTitle = true;
                    }
                }
                @Override
                public void characters(char[] ch, int start, int length) {
                    if (isTitle) {
                        System.out.println("Title: " + new String(ch, start, length));
                        isTitle = false;
                    }
                }
            };
            saxParser.parse("library.xml", handler);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


Output:

Title: Java Programming  
Title: Python Basics  

3. StAX (Streaming API for XML) Parser

Features

  • Allows both cursor-based and event-based parsing.
     
  • Supports reading and writing XML documents.

Use Cases

  • Suitable for applications requiring real-time processing of XML data.

Pros and Cons

Pros:

  • Better performance than DOM and SAX for large files.
     
  • Can process XML in a streaming manner.

Cons:

  • Slightly more complex than SAX.

Example

import javax.xml.stream.*;
import java.io.FileInputStream;

public class StAXParserExample {
    public static void main(String[] args) {
        try {
            XMLInputFactory factory = XMLInputFactory.newInstance();
            XMLStreamReader reader = factory.createXMLStreamReader(new FileInputStream("library.xml"));

            while (reader.hasNext()) {
                int event = reader.next();

                if (event == XMLStreamReader.START_ELEMENT && "title".equals(reader.getLocalName())) {
                    System.out.println("Title: " + reader.getElementText());
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


Output:

Title: Java Programming  
Title: Python Basics  

4. JAXB (Java Architecture for XML Binding)

Features

  • Converts XML to Java objects and vice versa.
     
  • Works with annotations to define the mapping.
    Use Cases
  • Ideal for applications that need to bind XML to Java objects for easier manipulation.

Pros and Cons

Pros:

  • Simplifies XML handling in Java.
     
  • Reduces boilerplate code.

Cons:

  • Limited to XML structures that can be mapped to Java objects.

Example

import javax.xml.bind.annotation.*;
import javax.xml.bind.*;
@XmlRootElement
class Book {
    public String title;
    public String author;
    public double price;
}
public class JAXBExample {
    public static void main(String[] args) {
        try {
            JAXBContext context = JAXBContext.newInstance(Book.class);
            // Unmarshalling XML to Java Object
            Unmarshaller unmarshaller = context.createUnmarshaller();
            Book book = (Book) unmarshaller.unmarshal(new File("book.xml"));
            System.out.println("Title: " + book.title);
            System.out.println("Author: " + book.author);
            System.out.println("Price: $" + book.price);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

The XMLHttpRequest Object

The XMLHttpRequest (XHR) object is a built-in browser object that allows you to make HTTP requests to a server and load the server response data back into the script. It is commonly used to request XML data from a server, which can then be parsed and processed by the client-side JavaScript code.

Let’s discuss a basic example of using the XMLHttpRequest object to load an XML file:

let xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {
    let xmlDoc = this.responseXML;
    // Process the XML data here
    console.log(xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue);
  }
};
xhr.open("GET", "books.xml", true);
xhr.send();


In this code:


1. We create a new XMLHttpRequest object.


2. We define a function to be called whenever the readyState property of the XHR object changes. This property represents the state of the request. A value of 4 means the operation is complete.


3. Inside the function, we check if the request is complete (readyState is 4) and if the status is "200", which means "OK". 


4. If the request is successful, we retrieve the server response data using the responseXML property. This property will contain the parsed XML document.


5. We can then process the XML data as needed. In this example, it's just logging the value of the first <title> element to the console.


6. We use the open() method to set up the request. Here, we're setting the HTTP method to "GET", providing the URL of the XML file ("books.xml"), and setting the third parameter to true to indicate we want the request to be asynchronous. 


7. Finally, we send the request with the send() method.


The XMLHttpRequest object provides a number of other useful properties and methods for working with HTTP requests and responses. Some Important one’s are:

  • responseText: Gets the server response as a string
     
  • getResponseHeader(): Gets the value of a specified response header
     
  • setRequestHeader(): Sets the value of a specified HTTP request header
     
  • onprogress: An event handler that can be used to track the progress of the request

Frequently Asked Questions

Which XML parser is best for large files?

SAX and StAX parsers are ideal for large files due to their low memory consumption.

What is the difference between DOM and SAX parsers?

DOM loads the entire XML file into memory, while SAX processes the file sequentially, reducing memory usage.

Can JAXB handle all XML structures?

No, JAXB works best for XML structures that can be directly mapped to Java objects.

Conclusion

In this article, we discussed XML parsers in Java, including DOM, SAX, StAX, and JAXB. Each parser has unique features and use cases, making them suitable for different scenarios. By understanding their strengths and limitations, developers can choose the right tool for XML processing.

You can also check out our other blogs on Code360.

Live masterclass