In the following code I'm parsing an xml file that contains
the elements <date>,<value>,<change> more than once. The parent
element of these elements is <data> . I load their values in a Vector 
wrapped in a Data object. While I expect more than one set of data to be 
displayed, I get only the last one. What am I doing wrong?
Thanks for your help.
***********************************************************
import java.util.*;
import java.io.*;
import java.net.*;
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;


public class Parser extends DefaultHandler {
    Vector vector = new Vector();
    String date, value, change, tempstring;
    Data data = null;

    public static void main(String[]args) {
        Parser p = new Parser();
        p.parse("database.xml");
        p.display();
    }

    private void display() {
        for (int i = 0; i < vector.size(); i++) {
            System.out.println(vector.size()); //debug
            data = (Data) vector.elementAt(i);

            System.out.println(data.getDate() + "\n" +
                               data.getValue() + "\n" +
                               data.getChange() + "\n");
            System.out.println();
        }
    }

    private void parse(String file) {
        try {
            SAXParserFactory spf = SAXParserFactory.newInstance();

            spf.setValidating(true);
            SAXParser saxParser = spf.newSAXParser();
            XMLReader xmlReader = saxParser.getXMLReader();

            xmlReader.setContentHandler(this);
            xmlReader.setErrorHandler(this);
            String urlstring = "file:" +
                                new File (file).getAbsolutePath();
            URL url = new URL(urlstring);
            URLConnection connection = url.openConnection();
            InputStream inputstream = connection.getInputStream();
            InputSource inputsource = new InputSource(inputstream);

            xmlReader.parse(inputsource);
        } catch (Throwable err) {
            System.out.println(err.getMessage());
        }
    }

    public void startElement(String namespaceURI, String localName,
        String qName, Attributes atts) throws SAXException {
        tempstring = "";
        if (qName.compareToIgnoreCase("data") == 0) {
            date = "";
            value = "";
            change = "";
        }
    }

    public void endElement(String uri, String localName,
                           String qName) throws SAXException {
        if (qName.compareToIgnoreCase("date") == 0) {
            date = tempstring;
        } else if (qName.compareToIgnoreCase("value") == 0) {
            value = tempstring;
        } else if (qName.compareToIgnoreCase("change") == 0) {
            change = tempstring;
        } else if (qName.compareToIgnoreCase("data") == 0) {
            vector.add(new Data(date, value, change));
        }
    }

    public void characters(char[] ch, int start,
                           int length) throws SAXException {
        String charactersfound = new String(ch, start, length);
        tempstring = tempstring + charactersfound;
    }

class Data {

    private String date = "";
    private String value = "";
    private String change = "";

    public Data() {}

    public Data(String date, String value, String change) {
        this.date = date;
        this.value = value;
        this.change = change;
    }

    public String getDate() {
        return date;
    }

    public String getValue() {
        return value;
    }

    public String getChange() {
        return change;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public void setChange(String change) {
        this.change = change;
    }
} //end Data
} //end Parser
*********************************************************

_________________________________________________________________
MSN Photos is the easiest way to share and print your photos: 
http://photos.msn.com/support/worldwide.aspx


To change your membership options, refer to:
http://www.sys-con.com/java/list.cfm

Reply via email to