Java HTML / XML How to - Implement StAX EventFilter








Question

We would like to know how to implement StAX EventFilter.

Answer

import java.io.FileInputStream;
/*from ww  w  .j a  v  a2s .c o m*/
import javax.xml.stream.EventFilter;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;

public class Main {
  public static void main(String[] args) throws Exception {
    XMLInputFactory xmlInputFactory = XMLInputFactory.newFactory();

    XMLEventReader xmlEventReader = xmlInputFactory
        .createXMLEventReader(new FileInputStream("input.xml"));
    InterestingElementFilter filter = new InterestingElementFilter();
    XMLEventReader interestingElementReader = xmlInputFactory
        .createFilteredReader(xmlEventReader, filter);

    while (interestingElementReader.hasNext()) {
      XMLEvent xmlEvent = interestingElementReader.peek();
      if (xmlEvent.isStartElement()) {
        System.out.println(xmlEvent.asStartElement().getName());
      }
      interestingElementReader.next();
    }
  }
}
class InterestingElementFilter implements EventFilter {
  public boolean accept(XMLEvent event) {
    if (event.isStartElement()) {
      StartElement startElement = event.asStartElement();
      String name = startElement.getName().getLocalPart();
      if (name.equals("InterestingElement")) {
        return true;
      }
    }
    return false;
  }
}

input.xml

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <InterestingElement>
        <child>Hello World</child>
    </InterestingElement>
</root>