--- /dev/null
+package de.j32.util;
+
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
+import java.util.Stack;
+
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerFactoryConfigurationError;
+import javax.xml.transform.sax.SAXTransformerFactory;
+import javax.xml.transform.sax.TransformerHandler;
+import javax.xml.transform.stream.StreamResult;
+
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.AttributesImpl;
+
+public class SimpleXmlGenerator
+{
+ TransformerHandler handler_;
+ Stack<String> openElements_ = new Stack<String>();
+
+ public SimpleXmlGenerator(OutputStream os, String encoding)
+ throws UnsupportedEncodingException
+ {
+ SAXTransformerFactory factory = (SAXTransformerFactory) SAXTransformerFactory
+ .newInstance();
+ // factory.setAttribute("indent-number", new Integer(2));
+ try {
+ handler_ = factory.newTransformerHandler();
+ }
+ catch (TransformerConfigurationException e) {
+ throw new AssertionError("XML/SAX transformer configuration error");
+ }
+ catch (TransformerFactoryConfigurationError e) {
+ throw new AssertionError(
+ "XML/SAX transformer factory configuration error");
+ }
+ Transformer tf = handler_.getTransformer();
+ tf.setOutputProperty(OutputKeys.ENCODING, encoding);
+ // if (doctype != null)
+ // tf.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM,doctype);
+ // tf.setOutputProperty(OutputKeys.INDENT,indent ? "yes" : "no");
+ handler_.setResult(new StreamResult(
+ new OutputStreamWriter(os, encoding)));
+ }
+
+ public void startDocument() throws SAXException
+ {
+ handler_.startDocument();
+ }
+
+ public void start(String name) throws SAXException
+ {
+ handler_.startElement("", "", name, null);
+ openElements_.add(name);
+ }
+
+ public static class Attributes
+ {
+ AttributesImpl attributes_ = new AttributesImpl();
+
+ public Attributes attribute(String name, String value)
+ {
+ attributes_.addAttribute("", "", name, "CDATA", value);
+ return this;
+ }
+
+ AttributesImpl getAttributes()
+ {
+ return attributes_;
+ }
+
+ Attributes()
+ {}
+ }
+
+ public Attributes attribute(String name, String value)
+ {
+ Attributes a = new Attributes();
+ return a.attribute(name, value);
+ }
+
+ public void start(String name, Attributes attrs) throws SAXException
+ {
+ handler_.startElement("", "", name, attrs.getAttributes());
+ openElements_.push(name);
+ }
+
+ public void end() throws SAXException
+ {
+ handler_.endElement("", "", openElements_.pop());
+ }
+
+ public void empty(String name) throws SAXException
+ {
+ start(name);
+ end();
+ }
+
+ public void empty(String name, Attributes attrs) throws SAXException
+ {
+ start(name, attrs);
+ end();
+ }
+
+ public void text(String text) throws SAXException
+ {
+ handler_.characters(text.toCharArray(), 0, text.length());
+ }
+
+ public void nl() throws SAXException
+ {
+ text("\n");
+ }
+
+ public void endDocument() throws SAXException
+ {
+ handler_.endDocument();
+ }
+}