Saturday, April 28, 2012

Creating a StAX Filter for XML

This tip creates a StAX filter using the javax.xml.stream.StreamFilter interface. This filter accepts only characters, but you can also set the filter XML to retrieve only elements, attributes, or both: 

class BasicStreamFilter implements StreamFilter{

public BasicStreamFilter(){}

//implement the StreamFilter.accept method
public boolean accept(XMLStreamReader XMLsrFilter)
 {
 if(XMLsrFilter.isCharacters())return true; else return false;
 }
}
...

public class StAXBasicStreamFilter{

   public StAXBasicStreamFilter(){}
 
    public static void main(String[] args)
        {
        XMLInputFactory XMLif=null;
        XMLStreamReader XMLsr=null;
        XMLStreamReader XMLsrFilter=null;
              
System.setProperty("javax.xml.stream.XMLInputFactory",
"com.sun.xml.stream.ZephyrParserFactory");
      
//create an XMLInputFactory intance
XMLif=XMLInputFactory.newInstance();
       
//setting a few properties
XMLif.setProperty("javax.xml.stream.isSupportingExternalEntities",Boolean.TRUE);
XMLif.setProperty("javax.xml.stream.isNamespaceAware",Boolean.TRUE);
XMLif.setProperty("javax.xml.stream.isReplacingEntityReferences",Boolean.TRUE);       
                                    
//get an XMLStreamReader object
try{          
   XMLsr=XMLif.createXMLStreamReader   
        ("file:///C:/Data_Local/XML/",new FileReader
             ("C://Data_local//XML//AutoDealer.xml"));
   XMLsrFilter=XMLif.createFilteredReader(XMLsr,new BasicStreamFilter
        ());           
   }catch(java.io.FileNotFoundException e)
        {System.out.println(e.getMessage());
   }catch(javax.xml.stream.XMLStreamException e)    
        {System.out.println(e.getMessage());}
                                          
 ...
 while(XMLsrFilter.hasNext())
      {                       
      int ev=XMLsrFilter.getEventType();
 ...

No comments:

Post a Comment