/* * $Id: XmlPullTest.java,v 1.5 2002/08/20 15:00:45 aslom Exp $ * * (C) Copyright 2002 by Yuval Oren. All rights reserved. * (C) Copyright 2002 by Aleksander Slominski. All rights reserved. * Modified from initial version by * Aleksander Slominski * * This software is released under the terms of the * GNU General Public License (GPL). Full * text is available at http://www.gnu.org/licenses/gpl.html */ import java.io.*; //import org.xml.sax.*; //import org.xml.sax.helpers.*; import java.net.*; //import org.gjt.xpp.*; import org.xmlpull.v1.*; public class XmlPullTest extends AbstractTest { private static final boolean USE_SB = true ; private XmlPullParser xpp; private XmlPullParserFactory factory; private StringBuffer buf = new StringBuffer(); private static boolean no_reuse; private static boolean ns; public static void main(String[] args) { if (args.length < 3) { usage("at least two arguments must be present"); System.exit(1); } else { if (args[2].equalsIgnoreCase("ns_on")) ns = true; else if (args[2].equalsIgnoreCase("ns_off")) ns = false; else { usage("expected ns_on or ns_off as third argument"); System.exit(1); } } if(args.length == 4) { if(! "no_reuse".equals(args[3])) { usage("third option if present must be 'no_reuse'"); } no_reuse = true; } new XmlPullTest(args[0],Integer.parseInt(args[1]),ns); } static public void usage(String msg) { System.out.println("Usage: java XmlPullTest [no_reuse]"); if(msg != null) System.err.println("Error:"+msg); } public XmlPullTest(String file, int iterations, boolean ns) { this.ns = ns; run(file,iterations); } protected void init() throws Exception { factory = XmlPullParserFactory.newInstance( System.getProperty(XmlPullParserFactory.PROPERTY_NAME), null); info("using factory "+factory.getClass()); info("namespaces: "+ns); info("reuse parser instances: "+(!no_reuse)); factory.setNamespaceAware(ns); xpp = factory.newPullParser(); info("using parser "+xpp.getClass()); } int [] holderForStartAndLength = new int[2]; protected void parse(Reader r) throws Exception { //xpp.reset(); // reset is doen by setInput() //xpp.setInput(new InputStreamReader((new URL(file)).openStream()) ); if(no_reuse) { xpp = factory.newPullParser(); } xpp.setInput(r); int token; LOOP: while (true) { //info(""+xpp.getPositionDescription()); token = xpp.next(); switch (token) { case XmlPullParser.START_TAG: //stag.resetStartTag(); //automatically done when tag is read String uri = xpp.getNamespace(); String localName = xpp.getName(); String prefix = xpp.getPrefix(); int len = xpp.getAttributeCount(); for (int i=0; i < len; i++) { String n = xpp.getAttributeName(i); // No way to get type // String t = stag.? String t = xpp.getAttributeType(i); String v = xpp.getAttributeValue(i); } if(USE_SB) buf.setLength(0); //stag.resetStartTag(); break; case XmlPullParser.END_TAG: if(USE_SB) {String c = buf.toString(); } //xpp.readEndTag(etag); //etag.resetEndTag(); //automaticaly done when tag is read break; case XmlPullParser.TEXT: if(USE_SB) { char[] ch = xpp.getTextCharacters(holderForStartAndLength); int start = holderForStartAndLength[0]; int length = holderForStartAndLength[1]; buf.append(ch, start, length); } else { String s = xpp.getText(); } break; case XmlPullParser.END_DOCUMENT: break LOOP; } } // good for resource utilization r.close(); } }