package com.alethis.xml; import org.xml.sax.XMLReader; import org.xml.sax.InputSource; import org.xml.sax.ContentHandler; import org.xml.sax.SAXException; import org.xml.sax.InputSource; import org.xml.sax.ErrorHandler; import org.xml.sax.DTDHandler; import org.xml.sax.EntityResolver; import org.xml.sax.Attributes; import org.xml.sax.helpers.AttributesImpl; import javax.xml.transform.TransformerFactory; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.ErrorListener; import javax.xml.transform.OutputKeys; import javax.xml.transform.sax.SAXSource; import javax.xml.transform.stream.StreamResult; import java.io.*; public class GenerateUsingXMLReader { private final static String OUTPUT_FILE = "C:\\project\\xml\\out.xml"; public final static void main(String[] args) { try { XMLReader generator = new GeneratorUsingXMLReader(); SAXSource source = new SAXSource(generator, new InputSource()); File f = new File(OUTPUT_FILE); FileWriter fw = new FileWriter(f); BufferedWriter bw = new BufferedWriter(fw); StreamResult result = new StreamResult(bw); TransformerFactory factory = TransformerFactory.newInstance(); Transformer transformer = factory.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.transform(source, result); System.out.println("DONE"); } catch (TransformerConfigurationException e) { System.out.println("Transformer Configuration Exception: " + e.getMessage()); } catch (TransformerException e) { System.out.println("Transformer Exception: " + e.getMessage()); } catch (IOException e) { System.out.println("IO Exception: " + e.getMessage()); } } } abstract class XMLReaderImpl implements XMLReader { protected ContentHandler handler; protected abstract void generate() throws SAXException; public void parse(InputSource input) throws IOException, SAXException { generate(); } public void parse(String systemId) throws IOException, SAXException { } public void setContentHandler(ContentHandler handler) { this.handler = handler; } public ContentHandler getContentHandler() { return this.handler; } public void setErrorHandler(ErrorHandler handler) { } public ErrorHandler getErrorHandler() { return null; } public void setDTDHandler(DTDHandler handler) { } public DTDHandler getDTDHandler() { return null; } public void setEntityResolver(EntityResolver resolver) { } public EntityResolver getEntityResolver() { return null; } public void setProperty(java.lang.String name, java.lang.Object value) { } public Object getProperty(java.lang.String name) { return null; } public void setFeature(java.lang.String name, boolean value) { } public boolean getFeature(java.lang.String name) { return false; } } class GeneratorUsingXMLReader extends XMLReaderImpl { private final static Attributes EMPTY_ATTRS = new AttributesImpl(); private final static String FAMILY = "family"; private final static String FATHER = "father"; private final static String MOTHER = "mother"; private final static String CHILDREN = "children"; private final static String CHILD = "child"; private final static String AGE = "age"; protected void generate() throws SAXException { handler.startDocument(); handler.startElement("", FAMILY, FAMILY, EMPTY_ATTRS); addElement(FATHER, "Michael Boyle", "49"); addElement(MOTHER, "Margaret Maclure", "46"); handler.startElement("", CHILDREN, CHILDREN, EMPTY_ATTRS); addElement(CHILD, "Chloe Boyle", "12"); addElement(CHILD, "Adrian Boyle", "10"); handler.endElement("", CHILDREN, CHILDREN); handler.endElement("", FAMILY, FAMILY); handler.endDocument(); } private void addElement(String element, String name, String age) throws SAXException { AttributesImpl ageAttrs = new AttributesImpl(); ageAttrs.addAttribute("", AGE, AGE, "CDATA", age); handler.startElement("", element, element, ageAttrs); handler.characters(name.toCharArray(), 0, name.length()); handler.endElement("", element, element); } }