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);
}
}