import java.io.*;
import org.xml.sax.SAXException;
import javax.xml.parsers.*;
import org.w3c.dom.Document;
import org.apache.xml.serialize.*;

/**
 * some static routines to parse and output XML using Xerces
 */

public class XML {

    /**
     * builds a DOM document from an input stream
     */
    static public Document parse(InputStream in) throws IOException, SAXException {
	try {
	    DocumentBuilderFactory factory = 
		DocumentBuilderFactory.newInstance();
	    factory.setValidating(true);
	    DocumentBuilder builder = factory.newDocumentBuilder();
	    Document document = builder.parse(in);
	    return document;
	}
	catch (FactoryConfigurationError e) {
	    // unable to get a document builder factory
	    e.printStackTrace();
	} 
	catch (ParserConfigurationException e) {
	    // parser was unable to be configured
	    e.printStackTrace();
	}
	return null;
    }

    /**
     * formats a DOM document tp an output stream
     */
    static public void format(OutputStream out, Document doc) throws IOException {
	OutputFormat format = new OutputFormat(doc);
	format.setIndenting(true);
	format.setLineWidth(0);             
	//format.setPreserveSpace(true);
	XMLSerializer serializer = new XMLSerializer (out, format);
	serializer.asDOMSerializer();
	serializer.serialize(doc);
    }

    public static void main(String args[]) throws Exception {
	File f = new File(args[0]);
	Document d = parse(new FileInputStream(f));
	format(System.out, d);
    }
}
