Parsing an xml file
Hello, there. I have written a class Publication that represents,
let's say a book, and i want to read an xml file that contains info
about a publication and store the (attribute, value) to the above
class. When i run that simple application, terminates unexpectedly
without a single exception and without printing anything. I have a
suspicion about the line
sax.parse(input, this); in the readPublication method. Shouldn't i
use "this" as the second argument of parse? Should i create another
class that extends DefaultHandler and call parse as sax.parse(input,
new myClass())? But, then, how could i have access to the Hashtable
that stores (attribute, values)? Thanks a lot for your help.
The code is as follows:
public class Publication extends DefaultHandler implements
Serializable {
Hashtable attributes;
/**
* for example book, paper, article
*/
String category;
/**
* the filename of that publication
*/
String filename;
/**
* the first tag should define the category
*/
boolean isFirstTag;
/**
* these are the currrent values of the read (attribute, value)
*/
String curtag;
String curvalue;
public Publication(String xmlfile, String originalFile) {
attributes = new Hashtable();
isFirstTag = true;
filename = originalFile;
readPublication(xmlfile);
}
public String getFilename() {
return filename;
}
public void readPublication(String filename) {
File input = new File(filename);
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
try {
SAXParser sax = factory.newSAXParser();
sax.parse(input, this);
} catch (ParserConfigurationException pce) {
System.out.println("Could not create that parser.");
System.out.println(pce.getMessage());
} catch (SAXException se) {
System.out.println("Problem with the SAX parser.");
System.out.println(se.getMessage());
} catch (IOException ioe) {
System.out.println("Error reading file.");
System.out.println(ioe.getMessage());
}
}
public void startElement(String uri, String localName, String qName,
Attributes attributes) {
if (isFirstTag) {
isFirstTag = false;
category = qName;
} else
curtag = qName;
}
public void characters(char[] ch, int start, int length) {
curvalue = new String(ch, start, length);
}
public void endElement(String uri, String localName, String qName) {
if (!qName.equals(category))
attributes.put(curtag, curvalue);
else {
System.out.println("I' ve just read a new publication:");
Set tags = attributes.keySet();
Iterator it = tags.iterator();
while (it.hasNext()) {
String attr = (String) it.next();
String value = (String) attributes.get(attr);
System.out.println(attr + value);
}
}
}
public static void main(String arguments[]) {
Publication pub = new Publication("pub1.librml", "pub1.pdf");
}
}