import java.io.*; import java.util.*; import sxt.XmlTokenizer; import sxt.XmlTokenizerException; /* * @author Aleksander Slominski [aslom@extreme.indiana.edu] */ public class SimpleXmlTokenizer implements Tester { //int count; //String elementName; public SimpleXmlTokenizer() { } public void setUp(Properties props) throws Exception { } public TestResult testCount(String data, int runs, String elementName) throws Exception { //this.elementName = elementName; char[] bufElementName = elementName.toCharArray(); int bufElementNameLen = bufElementName.length; // one run for warmup char[] buf = data.toCharArray(); XmlTokenizer sxt = new XmlTokenizer(); sxt.setParseContent(true); sxt.setMixedContent(false); Reader[] readers = new Reader[runs]; for(int i = 0; i < runs ; ++i) { readers[i] = new StringReader(data); } // start timing int count = -1; double start = TestTimer.tick(); for(int i = 0; i < runs ; ++i) { count = 0; //sxt.setInput(buf); sxt.setInput(readers[i]); int token; LOOP: while((token = sxt.next()) != XmlTokenizer.END_DOCUMENT) { if(token == XmlTokenizer.STAG_NAME) { if(sxt.posEnd - sxt.posStart == bufElementNameLen) { for(int p = 0; p < bufElementNameLen; ++p) { if(bufElementName[p] != sxt.buf[sxt.posStart + p]) continue LOOP; } ++count; } } } /* // this code is 25%-50% slower than low level code above :-) while((token = sxt.next()) != XmlTokenizer.END_DOCUMENT) { String s = null; if(token == XmlTokenizer.CONTENT || token == XmlTokenizer.ATTR_CONTENT) s = new String(sxt.pc, sxt.pcStart, sxt.pcEnd - sxt.pcStart); else s = new String(sxt.buf, sxt.posStart, sxt.posEnd - sxt.posStart); if(token == XmlTokenizer.STAG_NAME) { if(s.equals(elementName)) ++count; } } */ } double end = TestTimer.tick(); TestResult result = new TestResult(); result.elementCount = count; result.timeSecs = (end - start) / runs; return result; } }