JDOM – A Pure Java XML API

Today was a good day –I preached to an acquaintance about JDOM [1] and why I decided to use it in preference to other XML APIs [2, 3]. In the process, I realised I had not blogged about it. I am hoping this short article will help someone get started with XML and Java… programming is fun and believe me you will have fun using JDOM.

What is JDOM?
– Simply put, JDOM is a way to represent an XML document for easy and efficient reading, manipulation, and writing [7].
– It is an awesome Java api and is quite fun to play with.

Why did I choose JDOM over the other APIs?
– I am pressed with time and needed something to quickly help me get up to speed.
– It is a robust and mature solution –Jason founded the JDOM project in early 2000 along with Brett McLaughlin
– It was accepted as JSR 102 [4], but later withdrawn by lead developers due to perceived complexities [5] that would arise if it was to be bundled with the JDK.
– There is a slew of resources online… stackoverflow.com has especially been reliable source of information. Most importantly though, there are dedicated mailing lists that are very active [6].

How does it work?

Like any third-party java library, one needs to download it and add it the class path. A tool like Maven comes in handy, especially when used and an integrated component with an IDE like Eclipse [8] –I love eclipse and I use it for most of my development.

Examples

Source File

<?xml version="1.0" encoding="UTF-8"?>
<javaapi>
 <jdom>
 <name>JDOM</name>
 <url>http://www.jdom.org/</url>
 </jdom>
 <jaxp>
 <name>JAXP</name>
 <url>http://jaxp.java.net/</url>
 </jaxp>
 <dom4j>
 <name>dom4j</name>
 <url>http://dom4j.sourceforge.net/</url>
 </dom4j>
</javaapi>

1. Reading an XML File

*** Sourcecode ***

package org.lightonphiri.jdom;

import java.io.File;
import java.io.IOException;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;

public class JDOMReader {

 public static void main(String[] args) {
 SAXBuilder builder = new SAXBuilder();
 try {
 Document document = builder.build(new File("jdom_xml_file.xml"));
 Element rootNode = document.getRootElement();
 for(Element x : rootNode.getChildren()) {
 System.out.println(x.getName());
 for (Element y : x.getChildren()) {
 System.out.println(y.getName() + " : " + y.getText());
 }
 }
 } catch(IOException ioe) {
 ioe.printStackTrace();
 } catch(JDOMException jdome) {
 jdome.printStackTrace();
 }
 }
}

*** Output ***

jdom
 name : JDOM
 url : http://www.jdom.org/
 jaxp
 name : JAXP
 url : http://jaxp.java.net/
 dom4j
 name : dom4j
 url : http://dom4j.sourceforge.net/

2. Write to an XML File

package org.lightonphiri.jdom;

import java.io.FileWriter;
import java.io.IOException;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;

public class JDOMWriter {

 public static void main(String[] args) {
 // create child nodes and corresponding content
 Element name = new Element("name");
 name.addContent("XOM");
 Element url = new Element("url");
 url.addContent("http://xom.nu/");
 // add child nodes
 Element xom = new Element("xom");
 xom.addContent(name);
 xom.addContent(url);
 // create document object
 SAXBuilder builder = new SAXBuilder();
 try {
 Document document = builder.build("jdom_xml_file.xml");
 document.getRootElement().addContent(xom);
 XMLOutputter xmlOutput = new XMLOutputter(Format.getPrettyFormat());
 xmlOutput.output(document, System.out); // output new structure
 xmlOutput.output(document, new FileWriter("jdom_xml_file_new.xml"));
 } catch(IOException ioe) {
 ioe.printStackTrace();
 } catch(JDOMException jdome) {
 jdome.printStackTrace();
 }
 }
}

Where do I go from here?

  • JDOM 2 A Primer [9] is possibly the best place to start from. It has neat pointers and examples on how you can exploit the API.
  • The JDOM 2.0 javadocs documentation [10] will be very helpful –especially once you get up to speed with using the API.
  • StackOverflow has tonnes of questions on JDOM –a quick search normally reveals helpful solutions to common problems.
  • Subscribe to the mailing lists [6] –the people on the lists are more than willing to help.

I hope this helps someone out there.

Bibliography

[1] http://www.jdom.org
[2] http://stackoverflow.com/questions/373833/best-xml-parser-for-java
[3] http://docs.oracle.com/javase/tutorial/jaxp/index.html
[4] http://jcp.org/en/jsr/detail?id=102
[5] http://cvs.jdom.org/pipermail/jdom-interest/2004-September/014191.html
[6] http://www.jdom.org/involved/lists.html
[7] http://www.jdom.org/docs/faq.html#a0000
[8] http://www.eclipse.org/
[9] https://github.com/hunterhacker/jdom/wiki/JDOM2-A-Primer
[10] http://www.jdom.org/docs/apidocs/