import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.* ;
import org.w3c.dom.* ;
public class MyProcessor {
public static void main(String [] args) throws Exception {
File source = new File(args [0]) ;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true) ;
factory.setValidating(true) ;
DocumentBuilder builder = factory.newDocumentBuilder();
builder.setErrorHandler(new MyErrorHandler()) ;
Document document = builder.parse(source) ;
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) ;
}
}