How to read XML file in Java – (DOM Parser)
Written on
December 6, 2008 at 2:46 pm by
mkyong
Here i will show a simple example to demonstrate how to read a XML file in Java with DOM parser.
The DOM interface is the easiest to understand. It parses an entire XML document and load it into memory, it also using the classes modeling or object modeling of whole XML document, this modeling concept can make us traversed easily to get it’s elements.
Remember
DOM Parser is slow and consume a lot memory if it load a XML document which contains a lot of data.Please consider SAX parser as solution for it, SAX is faster than DOM and use less memory
If you want to compare different implementation between DOM and SAX, Please visit here for How to read XML file in Java – (SAX Parser)
Let’s start to see a simple DOM parser example.
XML file
<?xml version="1.0"?> <company> <staff> <firstname>yong</firstname> <lastname>mook kim</lastname> <nickname>mkyong</nickname> <salary>100000</salary> </staff> <staff> <firstname>low</firstname> <lastname>yin fong</lastname> <nickname>fong fong</nickname> <salary>200000</salary> </staff> </company>
Java Code
import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.w3c.dom.Node; import org.w3c.dom.Element; import java.io.File; public class ReadXMLFile { public static void main(String argv[]) { try { File fXmlFile = new File("c:\\file.xml"); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(fXmlFile); doc.getDocumentElement().normalize(); System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); NodeList nList = doc.getElementsByTagName("staff"); System.out.println("-----------------------"); for (int temp = 0; temp < nList.getLength(); temp++) { Node nNode = nList.item(temp); if (nNode.getNodeType() == Node.ELEMENT_NODE) { Element eElement = (Element) nNode; System.out.println("First Name : " + getTagValue("firstname",eElement)); System.out.println("Last Name : " + getTagValue("lastname",eElement)); System.out.println("Nick Name : " + getTagValue("nickname",eElement)); System.out.println("Salary : " + getTagValue("salary",eElement)); } } } catch (Exception e) { e.printStackTrace(); } } private static String getTagValue(String sTag, Element eElement) { NodeList nlList= eElement.getElementsByTagName(sTag).item(0).getChildNodes(); Node nValue = (Node) nlList.item(0); return nValue.getNodeValue(); } }
Output
Root element :company ----------------------- First Name : yong Last Name : mook kim Nick Name : mkyong Salary : 100000 First Name : low Last Name : yin fong Nick Name : fong fong Salary : 200000



[...] P.S You can compare the syntax with SAX and DOM parser in the following two examples – How to read XML file in Java – (SAX Parser) – How to read XML file in Java – (DOM Parser) [...]
You may want to look at vtd-xml as the state of the art in XML processing, consuming far less memory than DOM
http://vtd-xml.sf.net
You are my hero
Thanks a lot for this.
For simple XML files this is much better than SAX Parser which to say the least is a f****** pain in the a**.
Both SAX and DOM has their target audience
Thanks for the tip man!