import org.xml.sax.*; import org.xml.sax.helpers.*; import java.io.*; public class ParsingProxy implements ContentHandler { private StringBuffer strBuf; public static void main(String[] args) { XMLReader parser; try { parser = XMLReaderFactory.createXMLReader(); } catch (Exception e) { // fall back on Xerces parser by name try { parser = XMLReaderFactory.createXMLReader( "org.apache.xerces.parsers.SAXParser"); } catch (Exception ee) { System.err.println("Couldn't locate a SAX parser"); return; } } if (args.length != 1) { System.out.println( "Usage: java ParsingProxy URL"); } // Install the Document Handler parser.setContentHandler(new ParsingProxy()); // start parsing... try { parser.parse(args[0]); } catch (SAXParseException e) { // well-formedness error System.out.println(args[0] + " is not well formed."); System.out.println(e.getMessage() + " at line " + e.getLineNumber() + ", column " + e.getColumnNumber()); } catch (SAXException e) { // some other kind of error System.out.println(e.getMessage()); } catch (IOException e) { System.out.println("Could not report on " + args[0] + " because of the IOException " + e); } } public void setDocumentLocator(Locator locator) { } public void startDocument() throws SAXException { strBuf = new StringBuffer(); } public void endDocument() throws SAXException { } public void startElement(String namespaceURI, String localName, String qualifiedName, Attributes atts) throws SAXException { strBuf.setLength(0); System.out.print('('); System.out.println(localName); // send attributes int length = atts.getLength(); for (int i = 0; i < length; i++) { System.out.print('A'); System.out.print(atts.getQName(i)); System.out.print(' '); System.out.println(atts.getValue(i)); } } public void endElement(String namespaceURI, String localName, String qualifiedName) throws SAXException { // send accumulated text String outText = strBuf.toString().trim(); if (outText.length() > 0) { // Ingore blank lines System.out.print('-'); System.out.println(outText); } // close the element System.out.print(')'); System.out.println(localName); strBuf.setLength(0); } public void characters(char[] text, int start, int length) throws SAXException { // Since the characters method may be called multiple times, // accumulate the text into a stringBuffer until the closing element strBuf.append(text, start, length); } public void ignorableWhitespace(char[] text, int start, int length) throws SAXException { } public void processingInstruction(String target, String data) throws SAXException { // send processing instruction (name space value) System.out.print('?'); System.out.print(target); System.out.print(' '); System.out.println(data); } public void startPrefixMapping(String prefix, String uri) throws SAXException { } public void endPrefixMapping(String prefix) throws SAXException { } public void skippedEntity(String name) throws SAXException { } }