1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* -*- c-basic-offset: 4; indent-tabs-mode: nil; -*- //------100-columns-wide------>|*/ 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// for license please see accompanying LICENSE.txt file (available also at http://www.xmlpull.org/) 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.xmlpull.v1.sax2; 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.InputStream; 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.Reader; 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// not J2ME classes -- remove if you want to run in MIDP devices 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.URL; 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.MalformedURLException; 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// not J2ME classes 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.FileInputStream; 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.FileNotFoundException; 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.xml.sax.Attributes; 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.xml.sax.DTDHandler; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.xml.sax.ContentHandler; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.xml.sax.EntityResolver; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.xml.sax.ErrorHandler; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.xml.sax.InputSource; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.xml.sax.Locator; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.xml.sax.SAXException; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.xml.sax.SAXParseException; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.xml.sax.SAXNotRecognizedException; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.xml.sax.SAXNotSupportedException; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.xml.sax.XMLReader; 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.xml.sax.helpers.DefaultHandler; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.xmlpull.v1.XmlPullParser; 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.xmlpull.v1.XmlPullParserException; 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.xmlpull.v1.XmlPullParserFactory; 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * SAX2 Driver that pulls events from XmlPullParser 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and comverts them into SAX2 callbacks. 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @author <a href="http://www.extreme.indiana.edu/~aslom/">Aleksander Slominski</a> 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class Driver implements Locator, XMLReader, Attributes 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project{ 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected static final String DECLARATION_HANDLER_PROPERTY = 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "http://xml.org/sax/properties/declaration-handler"; 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected static final String LEXICAL_HANDLER_PROPERTY = 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "http://xml.org/sax/properties/lexical-handler"; 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected static final String NAMESPACES_FEATURE = 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "http://xml.org/sax/features/namespaces"; 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected static final String NAMESPACE_PREFIXES_FEATURE = 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "http://xml.org/sax/features/namespace-prefixes"; 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected static final String VALIDATION_FEATURE = 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "http://xml.org/sax/features/validation"; 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected static final String APACHE_SCHEMA_VALIDATION_FEATURE = 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "http://apache.org/xml/features/validation/schema"; 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected static final String APACHE_DYNAMIC_VALIDATION_FEATURE = 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "http://apache.org/xml/features/validation/dynamic"; 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected ContentHandler contentHandler = new DefaultHandler(); 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected ErrorHandler errorHandler = new DefaultHandler();; 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected String systemId; 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected XmlPullParser pp; 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //private final static boolean DEBUG = false; 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Driver() throws XmlPullParserException { 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project factory.setNamespaceAware(true); 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pp = factory.newPullParser(); 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Driver(XmlPullParser pp) throws XmlPullParserException { 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.pp = pp; 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // -- Attributes interface 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getLength() { return pp.getAttributeCount(); } 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getURI(int index) { return pp.getAttributeNamespace(index); } 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getLocalName(int index) { return pp.getAttributeName(index); } 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getQName(int index) { 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final String prefix = pp.getAttributePrefix(index); 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if(prefix != null) { 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return prefix+':'+pp.getAttributeName(index); 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return pp.getAttributeName(index); 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getType(int index) { return pp.getAttributeType(index); } 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getValue(int index) { return pp.getAttributeValue(index); } 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getIndex(String uri, String localName) { 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < pp.getAttributeCount(); i++) 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if(pp.getAttributeNamespace(i).equals(uri) 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && pp.getAttributeName(i).equals(localName)) 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return i; 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return -1; 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getIndex(String qName) { 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < pp.getAttributeCount(); i++) 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if(pp.getAttributeName(i).equals(qName)) 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return i; 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return -1; 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getType(String uri, String localName) { 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < pp.getAttributeCount(); i++) 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if(pp.getAttributeNamespace(i).equals(uri) 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && pp.getAttributeName(i).equals(localName)) 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return pp.getAttributeType(i); 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getType(String qName) { 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < pp.getAttributeCount(); i++) 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if(pp.getAttributeName(i).equals(qName)) 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return pp.getAttributeType(i); 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getValue(String uri, String localName) { 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return pp.getAttributeValue(uri, localName); 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getValue(String qName) { 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return pp.getAttributeValue(null, qName); 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // -- Locator interface 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getPublicId() { return null; } 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getSystemId() { return systemId; } 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getLineNumber() { return pp.getLineNumber(); } 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getColumnNumber() { return pp.getColumnNumber(); } 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // --- XMLReader interface 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean getFeature(String name) 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws SAXNotRecognizedException, SAXNotSupportedException 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if(NAMESPACES_FEATURE.equals(name)) { 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return pp.getFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES); 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else if(NAMESPACE_PREFIXES_FEATURE.equals(name)) { 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return pp.getFeature(XmlPullParser.FEATURE_REPORT_NAMESPACE_ATTRIBUTES); 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else if(VALIDATION_FEATURE.equals(name)) { 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return pp.getFeature(XmlPullParser.FEATURE_VALIDATION); 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // } else if(APACHE_SCHEMA_VALIDATION_FEATURE.equals(name)) { 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // return false; //TODO 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // } else if(APACHE_DYNAMIC_VALIDATION_FEATURE.equals(name)) { 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // return false; //TODO 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return pp.getFeature(name); 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //throw new SAXNotRecognizedException("unrecognized feature "+name); 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setFeature (String name, boolean value) 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws SAXNotRecognizedException, SAXNotSupportedException 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if(NAMESPACES_FEATURE.equals(name)) { 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pp.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, value); 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else if(NAMESPACE_PREFIXES_FEATURE.equals(name)) { 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if(pp.getFeature(XmlPullParser.FEATURE_REPORT_NAMESPACE_ATTRIBUTES) != value) { 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pp.setFeature(XmlPullParser.FEATURE_REPORT_NAMESPACE_ATTRIBUTES, value); 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else if(VALIDATION_FEATURE.equals(name)) { 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pp.setFeature(XmlPullParser.FEATURE_VALIDATION, value); 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // } else if(APACHE_SCHEMA_VALIDATION_FEATURE.equals(name)) { 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // // can ignore as validation must be false ... 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // // if(true == value) { 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // // throw new SAXNotSupportedException("schema validation is not supported"); 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // // } 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // } else if(APACHE_DYNAMIC_VALIDATION_FEATURE.equals(name)) { 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // if(true == value) { 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // throw new SAXNotSupportedException("dynamic validation is not supported"); 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // } 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pp.setFeature(name, value); 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //throw new SAXNotRecognizedException("unrecognized feature "+name); 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(XmlPullParserException ex) { 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // throw new SAXNotSupportedException("problem with setting feature "+name+": "+ex); 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object getProperty (String name) 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws SAXNotRecognizedException, SAXNotSupportedException 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if(DECLARATION_HANDLER_PROPERTY.equals(name)) { 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else if(LEXICAL_HANDLER_PROPERTY.equals(name)) { 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return pp.getProperty(name); 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //throw new SAXNotRecognizedException("not recognized get property "+name); 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setProperty (String name, Object value) 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws SAXNotRecognizedException, SAXNotSupportedException 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if(DECLARATION_HANDLER_PROPERTY.equals(name)) { 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new SAXNotSupportedException("not supported setting property "+name);//+" to "+value); 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else if(LEXICAL_HANDLER_PROPERTY.equals(name)) { 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new SAXNotSupportedException("not supported setting property "+name);//+" to "+value); 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pp.setProperty(name, value); 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(XmlPullParserException ex) { 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new SAXNotSupportedException("not supported set property "+name+": "+ ex); 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //throw new SAXNotRecognizedException("not recognized set property "+name); 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setEntityResolver (EntityResolver resolver) {} 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public EntityResolver getEntityResolver () { return null; } 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setDTDHandler (DTDHandler handler) {} 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public DTDHandler getDTDHandler () { return null; } 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setContentHandler (ContentHandler handler) 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.contentHandler = handler; 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ContentHandler getContentHandler() { return contentHandler; } 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setErrorHandler(ErrorHandler handler) { 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.errorHandler = handler; 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ErrorHandler getErrorHandler() { return errorHandler; } 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void parse(InputSource source) throws SAXException, IOException 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project systemId = source.getSystemId(); 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project contentHandler.setDocumentLocator(this); 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final Reader reader = source.getCharacterStream(); 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (reader == null) { 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InputStream stream = source.getByteStream(); 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final String encoding = source.getEncoding(); 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (stream == null) { 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project systemId = source.getSystemId(); 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if(systemId == null) { 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SAXParseException saxException = new SAXParseException( 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "null source systemId" , this); 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project errorHandler.fatalError(saxException); 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // NOTE: replace with Connection to run in J2ME environment 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final URL url = new URL(systemId); 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project stream = url.openStream(); 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (MalformedURLException nue) { 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project stream = new FileInputStream(systemId); 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (FileNotFoundException fnfe) { 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final SAXParseException saxException = new SAXParseException( 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "could not open file with systemId "+systemId, this, fnfe); 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project errorHandler.fatalError(saxException); 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pp.setInput(stream, encoding); 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pp.setInput(reader); 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (XmlPullParserException ex) { 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final SAXParseException saxException = new SAXParseException( 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "parsing initialization error: "+ex, this, ex); 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //if(DEBUG) ex.printStackTrace(); 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project errorHandler.fatalError(saxException); 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // start parsing - move to first start tag 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project contentHandler.startDocument(); 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // get first event 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pp.next(); 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // it should be start tag... 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if(pp.getEventType() != XmlPullParser.START_TAG) { 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final SAXParseException saxException = new SAXParseException( 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "expected start tag not"+pp.getPositionDescription(), this); 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //throw saxException; 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project errorHandler.fatalError(saxException); 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (XmlPullParserException ex) { 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final SAXParseException saxException = new SAXParseException( 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "parsing initialization error: "+ex, this, ex); 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ex.printStackTrace(); 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project errorHandler.fatalError(saxException); 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // now real parsing can start! 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project parseSubTree(pp); 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // and finished ... 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project contentHandler.endDocument(); 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void parse(String systemId) throws SAXException, IOException { 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project parse(new InputSource(systemId)); 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void parseSubTree(XmlPullParser pp) throws SAXException, IOException { 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.pp = pp; 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final boolean namespaceAware = pp.getFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES); 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if(pp.getEventType() != XmlPullParser.START_TAG) { 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new SAXException( 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "start tag must be read before skiping subtree"+pp.getPositionDescription()); 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final int[] holderForStartAndLength = new int[2]; 3618216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes final StringBuilder rawName = new StringBuilder(16); 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String prefix = null; 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String name = null; 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int level = pp.getDepth() - 1; 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int type = XmlPullParser.START_TAG; 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project LOOP: 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project do { 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project switch(type) { 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case XmlPullParser.START_TAG: 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if(namespaceAware) { 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final int depth = pp.getDepth() - 1; 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final int countPrev = 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project (level > depth) ? pp.getNamespaceCount(depth) : 0; 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //int countPrev = pp.getNamespaceCount(pp.getDepth() - 1); 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final int count = pp.getNamespaceCount(depth + 1); 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = countPrev; i < count; i++) 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project contentHandler.startPrefixMapping( 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pp.getNamespacePrefix(i), 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pp.getNamespaceUri(i) 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ); 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project name = pp.getName(); 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project prefix = pp.getPrefix(); 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if(prefix != null) { 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rawName.setLength(0); 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rawName.append(prefix); 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rawName.append(':'); 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rawName.append(name); 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project startElement(pp.getNamespace(), 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project name, 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // TODO Fixed this. Was "not equals". 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project prefix == null ? name : rawName.toString()); 396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project startElement(pp.getNamespace(), 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pp.getName(), 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pp.getName()); 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //++level; 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case XmlPullParser.TEXT: 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final char[] chars = pp.getTextCharacters(holderForStartAndLength); 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project contentHandler.characters(chars, 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project holderForStartAndLength[0], //start 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project holderForStartAndLength[1] //len 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ); 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case XmlPullParser.END_TAG: 412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //--level; 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if(namespaceAware) { 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project name = pp.getName(); 415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project prefix = pp.getPrefix(); 416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if(prefix != null) { 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rawName.setLength(0); 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rawName.append(prefix); 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rawName.append(':'); 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rawName.append(name); 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project contentHandler.endElement(pp.getNamespace(), 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project name, 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project prefix != null ? name : rawName.toString() 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ); 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // when entering show prefixes for all levels!!!! 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final int depth = pp.getDepth(); 428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final int countPrev = 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project (level > depth) ? pp.getNamespaceCount(pp.getDepth()) : 0; 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int count = pp.getNamespaceCount(pp.getDepth() - 1); 431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // undeclare them in reverse order 432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = count - 1; i >= countPrev; i--) 433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project contentHandler.endPrefixMapping( 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pp.getNamespacePrefix(i) 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ); 437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project contentHandler.endElement(pp.getNamespace(), 440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pp.getName(), 441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pp.getName() 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ); 443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case XmlPullParser.END_DOCUMENT: 447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break LOOP; 448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project type = pp.next(); 450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } while(pp.getDepth() > level); 451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (XmlPullParserException ex) { 452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final SAXParseException saxException = new SAXParseException("parsing error: "+ex, this, ex); 453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ex.printStackTrace(); 454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project errorHandler.fatalError(saxException); 455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Calls {@link ContentHandler#startElement(String, String, String, Attributes) startElement} 460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * on the <code>ContentHandler</code> with <code>this</code> driver object as the 461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link Attributes} implementation. In default implementation 462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link Attributes} object is valid only during this method call and may not 463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * be stored. Sub-classes can overwrite this method to cache attributes. 464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void startElement(String namespace, String localName, String qName) throws SAXException { 466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project contentHandler.startElement(namespace, localName, qName, this); 467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 470