3 import java.io.OutputStream;
4 import java.io.OutputStreamWriter;
5 import java.io.UnsupportedEncodingException;
6 import java.util.Stack;
8 import javax.xml.transform.OutputKeys;
9 import javax.xml.transform.Transformer;
10 import javax.xml.transform.TransformerConfigurationException;
11 import javax.xml.transform.TransformerFactoryConfigurationError;
12 import javax.xml.transform.sax.SAXTransformerFactory;
13 import javax.xml.transform.sax.TransformerHandler;
14 import javax.xml.transform.stream.StreamResult;
16 import org.xml.sax.SAXException;
17 import org.xml.sax.helpers.AttributesImpl;
19 public class SimpleXmlGenerator
21 TransformerHandler handler_;
22 Stack<String> openElements_ = new Stack<String>();
24 public SimpleXmlGenerator(OutputStream os, String encoding)
25 throws UnsupportedEncodingException
27 SAXTransformerFactory factory = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
28 // factory.setAttribute("indent-number", new Integer(2));
30 handler_ = factory.newTransformerHandler();
32 catch (TransformerConfigurationException e) {
33 throw new RuntimeException("XML/SAX transformer configuration error");
35 catch (TransformerFactoryConfigurationError e) {
36 throw new RuntimeException("XML/SAX transformer factory configuration error");
38 Transformer tf = handler_.getTransformer();
39 tf.setOutputProperty(OutputKeys.ENCODING,encoding);
40 // if (doctype != null)
41 // tf.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM,doctype);
42 // tf.setOutputProperty(OutputKeys.INDENT,indent ? "yes" : "no");
43 handler_.setResult(new StreamResult(new OutputStreamWriter(os, encoding)));
46 public void startDocument()
49 handler_.startDocument();
52 public void start(String name)
55 handler_.startElement("","",name,null);
56 openElements_.add(name);
59 public static class Attributes
61 AttributesImpl attributes_ = new AttributesImpl();
63 public Attributes attribute(String name, String value)
65 attributes_.addAttribute("","",name,"CDATA",value);
69 AttributesImpl getAttributes()
77 public Attributes attribute(String name, String value)
79 Attributes a = new Attributes();
80 return a.attribute(name, value);
83 public void start(String name, Attributes attrs)
86 handler_.startElement("","",name, attrs.getAttributes());
87 openElements_.push(name);
93 handler_.endElement("","",openElements_.pop());
96 public void empty(String name)
103 public void empty(String name, Attributes attrs)
110 public void text(String text)
113 handler_.characters(text.toCharArray(), 0, text.length());
122 public void endDocument()
125 handler_.endDocument();