import java.io.*;
import java.util.*;

import javax.xml.transform.sax.SAXSource;

import org.w3c.dom.*;

import org.xml.sax.XMLReader;
import org.xml.sax.InputSource;
import org.xml.sax.helpers.XMLReaderFactory;

import org.apache.xml.dtm.DTM;
import org.apache.xpath.XPathAPI;
import org.apache.xpath.CachedXPathAPI;
import org.apache.xpath.compiler.Compiler;
import org.apache.xml.dtm.ref.sax2dtm.SAX2DTM;
import org.apache.xml.dtm.ref.DTMManagerDefault;

public class MyParser {

	private static String XMLString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Account></Account>";

	private MyParser() {
	}

	public SAX2DTM createDTMFromSAXSource( SAXSource saxSource ) {

		SAX2DTM dtm = null;

		try {

			dtm = new SAX2DTM( new DTMManagerDefault(), saxSource, 99, null, null, false );
			XMLReader reader = getReader();
			reader.setErrorHandler( dtm );
			reader.setContentHandler( dtm );
			reader.setDTDHandler(dtm);
			reader.setProperty( "http://xml.org/sax/properties/lexical-handler", dtm );
			reader.parse( SAXSource.sourceToInputSource( saxSource ) );
		}
		catch( Exception excp ) {
			excp.printStackTrace();
		}
		return dtm;
	}

	private SAXSource getSAXSource( String xmlString ) {

		return (xmlString != null && xmlString.length() > 0) ?
				new SAXSource( new InputSource( new StringReader( xmlString ) ) ) :
				null;
	}

	private XMLReader getReader() throws Exception {

		return XMLReaderFactory.createXMLReader( "org.apache.xerces.parsers.SAXParser" );
	}

    public static void main( String[] args ) {

		try {

			MyParser ish = new MyParser();
			SAXSource saxSource = ish.getSAXSource( XMLString );
			SAX2DTM dtm = ish.createDTMFromSAXSource( saxSource );
			dtm.dumpDTM( System.err );

	    } catch( Exception e ) {
			e.printStackTrace();
	    }
    }

}