Xml Builder





7
Date Submitted Sun. Oct. 29th, 2006 9:36 AM
Revision 1 of 1
Scripter SCoon
Tags Java | XML
Comments 0 comments
Implementation-independent XML builder.
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);
}
  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();
  }
 
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;
  }
}
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();
  }

}
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Foobar RSS feed</title>
    <description>Foobar feed description</description>
    <item>
      <title>Item 1</title>
      <link>http://.....</link>
    </item>
    <item>
      <title>Item 2</title>
      <link>http://.....</link>
    </item>
  </channel>
</rss>
 

Vladislav Zlobin

Comments

There are currently no comments for this snippet.

Voting