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