From 3445af5ce725c78fd252685ab95fc52c3714b55c Mon Sep 17 00:00:00 2001 From: shaper Date: Mon, 15 Oct 2001 23:46:02 +0000 Subject: [PATCH] Created a simple extensible parser class to take care of common character data gathering and file parsing machinations. git-svn-id: https://samskivert.googlecode.com/svn/trunk@357 6335cc39-0255-0410-8fd6-9bcaacd3b74c --- .../java/com/samskivert/xml/SimpleParser.java | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 projects/samskivert/src/java/com/samskivert/xml/SimpleParser.java diff --git a/projects/samskivert/src/java/com/samskivert/xml/SimpleParser.java b/projects/samskivert/src/java/com/samskivert/xml/SimpleParser.java new file mode 100644 index 00000000..e6130be5 --- /dev/null +++ b/projects/samskivert/src/java/com/samskivert/xml/SimpleParser.java @@ -0,0 +1,103 @@ +// +// $Id: SimpleParser.java,v 1.1 2001/10/15 23:46:02 shaper Exp $ + +package com.samskivert.xml; + +import java.io.*; +import javax.xml.parsers.ParserConfigurationException; + +import org.xml.sax.*; +import org.xml.sax.helpers.DefaultHandler; + +import com.samskivert.Log; + +/** + * The simple parser class provides an extensible object that is + * intended to simplify the task of writing an object to parse a + * particular XML file. + */ +public class SimpleParser extends DefaultHandler +{ + // documentation inherited + public void characters (char ch[], int start, int length) + { + _chars.append(ch, start, length); + } + + // documentation inherited + public void endElement (String uri, String localName, String qName) + { + finishElement(uri, localName, qName, _chars.toString().trim()); + _chars = new StringBuffer(); + } + + /** + * Parse the given file. + * + * @param fname the file to parse. + * + * @exception IOException thrown if an error occurs while parsing + * the file. + */ + public void parseFile (String fname) throws IOException + { + _fname = fname; + + try { + InputStream is = getInputStream(fname); + + // read the XML input stream and construct the scene object + _chars = new StringBuffer(); + XMLUtil.parse(this, is); + + } catch (ParserConfigurationException pce) { + throw new IOException(pce.toString()); + + } catch (SAXException saxe) { + throw new IOException(saxe.toString()); + } + } + + /** + * Called when parsing an element is finished and its data is + * fully available. Essentially the same as {@link #endElement} + * excepting that the final complete character data is provided as + * a parameter and is conveniently trimmed of any extraneous white + * space. + */ + protected void finishElement ( + String uri, String localName, String qName, String data) + { + // nothing for now + } + + /** + * Returns an input stream to read data from the given file name. + */ + protected InputStream getInputStream (String fname) + throws IOException + { + FileInputStream fis = new FileInputStream(fname); + return new BufferedInputStream(fis); + } + + /** + * Parse the given string as an integer and return the integer + * value, or -1 if the string is malformed. + */ + protected int parseInt (String val) + { + try { + return (val == null) ? -1 : Integer.parseInt(val); + } catch (NumberFormatException nfe) { + Log.warning("Malformed integer value [val=" + val + "]."); + return -1; + } + } + + /** The file being parsed. */ + protected String _fname; + + /** The character data gathered while parsing. */ + protected StringBuffer _chars; +}