CartDocumentHandler.java |
package xml; import java.util.Vector; import net.Cart; import net.Product; import org.xml.sax.helpers.DefaultHandler; /** * The CartDocumentHandler gets notification in * the form of a call-back method. These * call-backs are like the Listener model * used for event handling. When a new element * is encountered, for example, that creates * a call-back. The call-backs are handled * in the DocumentHandler: */ public class CartDocumentHandler extends DefaultHandler { private Cart c = new Cart(); private Vector stringVector = new Vector(); public Cart getCart() { return c; } /** * The Locator instance must be * used locally to identify * the origin of a SAX event. */ //public void setDocumentLocator(Locator l) { //} // public void startDocument() // throws SAXException { // } // public void endDocument() // throws SAXException { //} /** The AttributeList is not * going to have any attributes * in it for our example (i.e. * <book isbn=10> provides an * attribute of isbn whose value is 10). */ public void startElement() { } /** * When we get the </Product> tag, then * we want to invoke * addProduct otherwise, just return: */ public void endElement(String name) { if (!name.equals("Product")) return; addProduct(); } /** * addProduct will * make an instance of a * Product class and add it to the * Cart instance. It is added by parsing * the last three strings that * have been pushed into the StringVector. */ public void addProduct() { String sa[] = new String[stringVector.size()]; stringVector.copyInto(sa); if (sa.length < 3) return; String name = sa[0]; float price = Float.valueOf(sa[1]).floatValue(); int productId = Integer.valueOf(sa[2]).intValue(); Product p = new Product(name, price, productId); c.addProduct(p); stringVector = new Vector(); } /** * * when characters are found, we add them to * the string vector for latter use. */ public void characters(char buf [], int offset, int len) { stringVector.addElement(new String(buf, offset, len)); } public void ignorableWhitespace( char buf [], int offset, int len) { } /** * The processingInstruction is * called back when a non XML * declaration is made. */ public void processingInstruction( String target, String data) { } }