import java.util.HashMap; import java.util.Map; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLStreamException; import javax.xml.stream.events.EndElement; import javax.xml.stream.events.StartElement; import javax.xml.stream.events.XMLEvent; public class StAXSample4 { private Map handlers; public StAXSample4(String xmlfile) throws FileNotFoundException, XMLStreamException { handlers = initHandlers(); XMLInputFactory factory = XMLInputFactory.newInstance(); BufferedInputStream stream = new BufferedInputStream(new FileInputStream(xmlfile)); XMLEventReader reader = factory.createXMLEventReader(stream); while (reader.hasNext()) { XMLEvent event = reader.nextEvent(); EventHandler handler = handlers.get(event.getEventType()); handler.handleEvent(event); } reader.close(); } private Map initHandlers() { Map handlers = new HashMap(); handlers.put(XMLEvent.START_ELEMENT, new StartElementHandler()); handlers.put(XMLEvent.END_ELEMENT, new EndElementHandler()); handlers.put(XMLEvent.ATTRIBUTE, new GeneralElementHandler()); handlers.put(XMLEvent.CDATA, new GeneralElementHandler()); handlers.put(XMLEvent.CHARACTERS, new GeneralElementHandler()); handlers.put(XMLEvent.COMMENT, new GeneralElementHandler()); handlers.put(XMLEvent.DTD, new GeneralElementHandler()); handlers.put(XMLEvent.END_DOCUMENT, new GeneralElementHandler()); handlers.put(XMLEvent.ENTITY_DECLARATION, new GeneralElementHandler()); handlers.put(XMLEvent.ENTITY_REFERENCE, new GeneralElementHandler()); handlers.put(XMLEvent.NAMESPACE, new GeneralElementHandler()); handlers.put(XMLEvent.NOTATION_DECLARATION, new GeneralElementHandler()); handlers.put(XMLEvent.PROCESSING_INSTRUCTION, new GeneralElementHandler()); handlers.put(XMLEvent.SPACE, new GeneralElementHandler()); handlers.put(XMLEvent.START_DOCUMENT, new GeneralElementHandler()); return handlers; } public static void main(String[] args) throws FileNotFoundException, XMLStreamException { new StAXSample4(args[0]); } } interface EventHandler { public void handleEvent(XMLEvent element); } class StartElementHandler implements EventHandler { public void handleEvent(XMLEvent event) { StartElement element = (StartElement)event; System.out.println("StartElement: " + element.getName().getLocalPart()); } } class EndElementHandler implements EventHandler { public void handleEvent(XMLEvent event) { EndElement element = (EndElement)event; System.out.println("EndElement: " + element.getName().getLocalPart()); } } class GeneralElementHandler implements EventHandler { public void handleEvent(XMLEvent event) {} }