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 org.xml.sax.helpers.XMLFilterImpl; 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 GenerateUsingXMLFilter { private final static String OUTPUT_FILE = "C:\\project\\xml\\out.xml"; public final static void main(String[] args) { try { XMLReader generator = new GeneratorUsingXMLFilter(); 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()); } } } class GeneratorUsingXMLFilter extends XMLFilterImpl { 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"; public void parse(InputSource is) throws SAXException { generate(); } public void parse(String systemId) throws SAXException { generate(); } private void generate() throws SAXException { startDocument(); startElement("", FAMILY, FAMILY, EMPTY_ATTRS); addElement(FATHER, "Michael", "49"); addElement(MOTHER, "Margaret", "46"); startElement("", CHILDREN, CHILDREN, EMPTY_ATTRS); addElement(CHILD, "Chloe", "12"); addElement(CHILD, "Adrian", "10"); endElement("", CHILDREN, CHILDREN); endElement("", FAMILY, FAMILY); endDocument(); } private void addElement(String element, String name, String age) throws SAXException { AttributesImpl ageAttrs = new AttributesImpl(); ageAttrs.addAttribute("", AGE, AGE, "CDATA", age); startElement("", element, element, ageAttrs); characters(name.toCharArray(), 0, name.length()); endElement("", element, element); } }