/* * $Id: XPP2Test.java,v 1.2 2002/04/16 18:59: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.*; public class XPP2Test extends AbstractTest { private XmlPullParser xpp; private XmlPullParserFactory factory; private XmlStartTag stag; private XmlEndTag etag; 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 XPP2Test(args[0],Integer.parseInt(args[1]),ns); } static public void usage(String msg) { System.out.println("Usage: java XPP2Test [no_reuse]"); if(msg != null) System.err.println("Error:"+msg); } public XPP2Test(String file, int iterations, boolean ns) { this.ns = ns; run(file,iterations); } protected void init() throws Exception { factory = XmlPullParserFactory.newInstance(); info("using factory "+factory.getClass()); xpp = factory.newPullParser(); info("using parser "+xpp.getClass()); info("namespaces: "+ns); info("reuse parser instances: "+(!no_reuse)); xpp.setNamespaceAware(ns); xpp.setNamespaceAttributesReporting(!ns); // Prepare parsing variables stag = factory.newStartTag(); etag = factory.newEndTag(); } 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); byte token; LOOP: while (true) { token = xpp.next(); switch (token) { case XmlPullParser.START_TAG: //stag.resetStartTag(); //automatically done when tag is read xpp.readStartTag(stag); String uri = stag.getNamespaceUri(); String localName = stag.getLocalName(); String rawName = stag.getRawName(); int len = stag.getAttributeCount(); for (int i=0; i < len; i++) { String n = stag.getAttributeRawName(i); // No way to get type // String t = stag.? //String t = stag.getAttributeType(i); String v = stag.getAttributeValue(i); } buf.setLength(0); //stag.resetStartTag(); break; case XmlPullParser.END_TAG: String c = buf.toString(); xpp.readEndTag(etag); //etag.resetEndTag(); //automaticaly done when tag is read break; case XmlPullParser.CONTENT: String s = xpp.readContent(); buf.append(s); break; case XmlPullParser.END_DOCUMENT: break LOOP; } } // good for resource utilization r.close(); } }