I am still getting only the last set of <date><value><change>. I forgot to
mention that <data> is the root element and within this element there is a
sequence of <date><value><change> elements.
Panos
>From: Jianjun Zhang <[EMAIL PROTECTED]>
>Reply-To: "JDJList" <[EMAIL PROTECTED]>
>To: "JDJList" <[EMAIL PROTECTED]>
>Subject: [jdjlist] Re: For Charles or anyone that can help
>Date: Thu, 16 May 2002 15:11:12 -0700
>
>You should reuse class variables (date, value, change, ...) in your
>endElement(...) callback routines. Everytime this is
>called, you are assigning new values to date, value and change (make them
>pointing to new values). Essentially, at the
>end, your vector contains a list of objects with the same internal variable
>values (the last one). Use the following:
>
> if (qName.compareToIgnoreCase("date") == 0) {
> date = new String(tempstring);
> } else if (qName.compareToIgnoreCase("value") == 0) {
> value = new String(tempstring);
> } else if (qName.compareToIgnoreCase("change") == 0) {
> change = new String(tempstring);
> } else if (qName.compareToIgnoreCase("data") == 0) {
> vector.add(new Data(date, value, change));
> }
>
>This may not be the most efficient way of doing this (a string copy is
>performed), but requires least change, a better probably
>is to keep a stack of the values so that no copies are needed.
>
>This is assuming that there is only one set of date, value, change elements
>per data element parent.
>I haven't tested this, but hope it works.
>
>-JJ
>
>Panagiotis Plevrakis wrote:
>
> > 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
>
>
>To change your membership options, refer to:
>http://www.sys-con.com/java/list.cfm
_________________________________________________________________
Chat with friends online, try MSN Messenger: http://messenger.msn.com
To change your membership options, refer to:
http://www.sys-con.com/java/list.cfm