Parse XML file in Java using DOM Parser

Java Parse File using DOM Parser

In this example, we will parse an XML file using the Java inbuilt DOM (Document Object Model) parser.

Sample XML file:
<?xml version="1.0" encoding="UTF-8"?>
<students>
  <student>
    <Id>1</Id>
    <Name>Sam</Name>
    <Age>20</Age>
  </student>
  <student>
    <Id>2</Id>
    <Name>Rita</Name>
    <Age>22</Age>
  </student>
  <student>
    <Id>3</Id>
    <Name>Mike</Name>
    <Age>23</Age>
  </student>
  <student>
    <Id>4</Id>
    <Name>Alex</Name>
    <Age>21</Age>
  </student>
</students>
Java Code:

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.File;
import java.io.IOException;

/**
 * 
 * Code2care Java Programs
 * 
 * This program demonstrates how to parse an
 * XML file using Dom Parser.
 * 
 */
public class JavaDomParserExample {

    public static void main(String[] args) throws ParserConfigurationException, IOException, SAXException {

        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
        Document document = documentBuilder.parse(new File("/Users/code2care/IdeaProjects/plan/src/sample.xml"));

        String rootNode = document.getDocumentElement().getNodeName();
        NodeList studentsList = document.getElementsByTagName("student");

        for (int i = 0; i < studentsList.getLength(); i++) {

            Element student = (Element) studentsList.item(i);
            String id = student.getElementsByTagName("Id").item(0).getTextContent();
            String name = student.getElementsByTagName("Name").item(0).getTextContent();
            String age = student.getElementsByTagName("Age").item(0).getTextContent();

            System.out.println(rootNode + " record : " +( i + 1));
            System.out.println("Id: " + id);
            System.out.println("Name: " + name);
            System.out.println("Age: " + age);
            System.out.println("--------------");
        }
    }
}
Output:
students record: 1
Id: 1
Name: Sam
Age: 20
--------------
students record: 2
Id: 2
Name: Rita
Age: 22
--------------
students record: 3
Id: 3
Name: Mike
Age: 23
--------------
students record: 4
Id: 4
Name: Alex
Age: 21
--------------
Steps:
  1. Create an object of javax.xml.parsers.DocumentBuilderFactory the java core inbuilt XML parser.
  2. Create an object of javax.xml.parsers.DocumentBuilder
  3. Now, Create the org.w3c.dom.Document object
  4. Get the node list using: document.getElementsByTagName("tag-name-here")
  5. Iterate over the NodeList and get access to the elements of the xml file.

Note: DOM Parser will load the whole of the XML file in memory, so if the XML file is too huge you should avoid using DOM parser and instead use a SAX parser to avoid OOM (Out of Memory Errors).



Frequently Asked Questions (FAQ) about Java DOM Parser

Q: What is DOM parsing in Java?

A: DOM (Document Object Model) parsing in Java is a way to parse XML documents. It creates a tree structure of the entire document in memory, allowing for easy navigation and manipulation of the XML content.

Q: What are the main classes used in Java DOM parsing?

A: The main classes used in Java DOM parsing are DocumentBuilderFactory, DocumentBuilder, and Document from the javax.xml.parsers and org.w3c.dom packages.

Q: How do you create a DOM parser in Java?

A: To create a DOM parser in Java, you typically use the DocumentBuilderFactory to create a DocumentBuilder, which then parses the XML file to create a Document object.

Q: What are the advantages of using DOM parser?

A: DOM parser allows for easy navigation and manipulation of XML content. It's suitable for smaller XML documents and when you need to modify the document structure.

Q: What are the disadvantages of using DOM parser?

A: DOM parser loads the entire XML document into memory, which can be memory-intensive for large documents. It may not be suitable for parsing very large XML files.

Q: How do you handle exceptions in DOM parsing?

A: DOM parsing can throw ParserConfigurationException, SAXException, and IOException. These should be caught or declared to be thrown in the method signature.

Q: Can DOM parser be used to create XML documents?

A: Yes, DOM parser can be used to create new XML documents as well as parse existing ones. You can create elements, attributes, and text nodes to build an XML structure.

Q: How does DOM parsing compare to SAX parsing?

A: DOM parsing loads the entire document into memory, allowing for easy navigation but using more memory. SAX parsing is event-based, more memory-efficient, but doesn't allow for easy document navigation.

Q: Can DOM parser handle large XML files?

A: DOM parser is not ideal for very large XML files as it loads the entire document into memory. For large files, consider using SAX parser or StAX parser which are more memory-efficient.

Q: Is DOM parsing thread-safe?

A: The DOM implementation in Java is not thread-safe. If you need to access a DOM document from multiple threads, you should use external synchronization.

Comments & Discussion

Facing issues? Have questions? Post them here! We're happy to help!