Implementation-independent builder interface: public interface XmlBuilder { XmlBuilder open (String tagName); XmlBuilder close(); XmlBuilder setAttribute (String name, String value); XmlBuilder addText(String text); XmlBuilder addTaggedText(String tagName, String text); } Sample code: protected static void addContent (XmlBuilder xb) { xb.open("channel") .addTaggedText("title", "Foobar RSS feed") .addTaggedText("description", "Foobar feed description") .open("item") .addTaggedText("title", "Item 1") .addTaggedText("link", "http://.....") .close() .open("item") .addTaggedText("title", "Item 2") .addTaggedText("link", "http://.....") .close() .close(); } JDOM-specific implementation: import org.jdom.Element; import org.jdom.Document; public class JDomXmlBuilder implements XmlBuilder { Document m_document; Element m_current; public JDomXmlBuilder(String rootName) { m_current = new Element(rootName); m_document = new Document(m_current); } public Document getDocument() { return m_document; } public XmlBuilder open (String tagName) { Element element = new Element(tagName); m_current.addContent(element); m_current = element; return this; } public XmlBuilder close() { m_current = (Element) m_current.getParent(); return this; } public XmlBuilder setAttribute (String name, String value) { m_current.setAttribute(name, value); return this; } public XmlBuilder addText(String text) { m_current.addContent(text); return this; } public XmlBuilder addTaggedText(String tagName, String text) { Element element = new Element(tagName); element.addContent(text); m_current.addContent(element); return this; } } Sample program: import org.jdom.Element; import org.jdom.Document; import org.jdom.output.XMLOutputter; public class Test { public static void main (String[] args) throws Exception { JDomXmlBuilder xb = new JDomXmlBuilder("rss"); xb.setAttribute("version", "2.0"); addContent(xb); XMLOutputter out = new XMLOutputter(); out.output(xb.getDocument(), System.out); } protected static void addContent (XmlBuilder xb) { xb.open("channel") .addTaggedText("title", "Foobar RSS feed") .addTaggedText("description", "Foobar feed description") .open("item") .addTaggedText("title", "Item 1") .addTaggedText("link", "http://.....") .close() .open("item") .addTaggedText("title", "Item 2") .addTaggedText("link", "http://.....") .close() .close(); } } Result XML code: Foobar RSS feed Foobar feed description Item 1 http://..... Item 2 http://.....