import java.io.*; import java.util.*; import org.xml.sax.AttributeList; import org.xml.sax.HandlerBase; import org.xml.sax.InputSource; import org.xml.sax.Parser; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; /* * @author Aleksander Slominski [aslom@extreme.indiana.edu] */ public class SAXTester extends HandlerBase implements Tester { int count; String elementName; Parser parser; String parserName; public SAXTester() { } public void setUp(Properties props) throws Exception { parserName = props.getProperty("sax.parsername"); parser = (Parser)Class.forName(parserName).newInstance(); //parser.setFeature("http://xml.org/sax/features/validation", false); //TODO //parser.setFeature("http://xml.org/sax/features/namespaces", true ); parser.setDocumentHandler(this); parser.setErrorHandler(this); } public TestResult testCount(String data, int runs, String elementName) throws Exception { this.elementName = elementName; // one run for warmup //Reader reader = new StringReader(data); Reader reader = new BufferedReader(new StringReader(data)); InputSource in = new InputSource(reader); parser.parse(in); InputSource[] ins = new InputSource[runs]; for(int i = 0; i < runs ; ++i) { reader = new StringReader(data); ins[i] = new InputSource(reader); } // start timing double start = TestTimer.tick(); for(int i = 0; i < runs ; ++i) { count = 0; parser.parse(ins[i]); } double end = TestTimer.tick(); TestResult result = new TestResult(); result.elementCount = count; result.timeSecs = (end - start) / runs; return result; } // SAX1 handler public void startElement(String name, AttributeList attribs) { //System.err.println("name='"+name+"'"); int i = name.indexOf(':'); if(i != -1) name = name.substring(i + 1); if(name.equals(elementName)) { //System.err.println("name='"+name+"'"); ++count; } } public String toString() { return "SAXParser for "+parserName; } }