import java.io.File; import java.io.FileInputStream; import javax.xml.stream.EventFilter; import javax.xml.stream.StreamFilter; import javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import javax.xml.stream.events.XMLEvent; public class EventFilterExample { public static void main(String[] args) throws Exception { File file = new File("text.xml"); XMLInputFactory inputFactory = XMLInputFactory.newInstance(); XMLEventReader reader = inputFactory.createXMLEventReader(new FileInputStream(file)); System.out.println("Unfiltered Count = " + countEvents(reader)); reader = inputFactory.createXMLEventReader(new FileInputStream(file)); EventFilter filter = new ElementOnlyFilter(); reader = inputFactory.createFilteredReader(reader, filter); System.out.println("Filtered Count = " + countEvents(reader)); } private static int countEvents(XMLEventReader reader) throws XMLStreamException { int counter = 0; while (reader.hasNext()) { reader.next(); counter++; } return counter; } } class ElementOnlyFilter implements EventFilter, StreamFilter { public boolean accept(XMLEvent event) { return accept(event.getEventType()); } public boolean accept(XMLStreamReader reader) { return accept(reader.getEventType()); } private boolean accept(int eventType) { return eventType == XMLStreamConstants.START_ELEMENT || eventType == XMLStreamConstants.END_ELEMENT; } }