import java.io.File;
import org.apache.xerces.parsers.DOMParser;
import org.w3c.dom.*;

import org.xml.sax.* ;

public class MySchemaProcessor {

    static final String VALIDATION_FEATURE_ID =
            "http://xml.org/sax/features/validation" ;

    static final String SCHEMA_VALIDATION_FEATURE_ID =
            "http://apache.org/xml/features/validation/schema" ;

    static final String SCHEMA_FULL_CHECKING_FEATURE_ID =
            "http://apache.org/xml/features/validation/schema-full-checking" ;

    public static void main(String [] args) throws Exception {

        DOMParser parser = new DOMParser();
    
        //  Turn Validation on
        parser.setFeature(VALIDATION_FEATURE_ID, true);
        parser.setFeature(SCHEMA_VALIDATION_FEATURE_ID, true);
        parser.setFeature(SCHEMA_FULL_CHECKING_FEATURE_ID, true);

        parser.setErrorHandler(new MyErrorHandler()) ;
        parser.parse(args [0]) ;
        Document document = parser.getDocument() ;

        process(document.getDocumentElement()) ;
    }

    static void process(Node node) {
        System.out.println(node.getNodeName()) ;
        switch(node.getNodeType()) {
            case Node.ELEMENT_NODE:
                NamedNodeMap attributes = node.getAttributes() ; 
                for(int i = 0 ; i < attributes.getLength() ; i++)
                    process(attributes.item(i)) ;
                NodeList children = node.getChildNodes() ; 
                for(int i = 0 ; i < children.getLength() ; i++)
                    process(children.item(i)) ;
                break ;
            case Node.TEXT_NODE:
            case Node.ATTRIBUTE_NODE:
                System.out.println(node.getNodeValue()) ;
        }
    }
}

class MyErrorHandler implements ErrorHandler {
    public void warning(SAXParseException e) throws SAXException {
        System.out.println(e.getMessage());
    }

    public void error(SAXParseException e) throws SAXException {
        System.out.println(e.getMessage());
    }

    public void fatalError(SAXParseException e) throws SAXException {
        System.out.println(e.getMessage());
        System.exit(1) ;
    }
}