my dog learned polymorphism
The moose likes Java in General and the fly likes XML SaxParser problem Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Java in General
Bookmark "XML SaxParser problem" Watch "XML SaxParser problem" New topic

XML SaxParser problem

Jayesh Netravali

Joined: May 07, 2003
Posts: 12
I have an odd problem. I am using a SAX parser to parse an XML file which has a root and a number of repeating elements in the root. For eg. It is like representing a Database table in the XML format. The format is
<column1>value1</column1> <column2>value2</column2>...

I parse this XML using the javax.xml.parsers.SAXParser. My parser class extends the DefaultHandler. I have to display this info in a JTable. Hence I make a Vector of Vectors by reading the String by overriding the characters() method of the DefaultHandler

The problem is after some 90-95 <row> tags the characters() method returns me the value of the text content for a tag in two parts. i.e for eg for the 91st row if the tag is <column1>This is-a test message</column1> it returns me 'This is' and '-a test message' as two Strings. Thus one String is stored in my vector in two parts, which screws up my table display.

If I delete one row from the xml file then the problem shifts to the next row in the file. I dont know if it some problem with the capacity of a vector?

Any pointers to the solun of the above problem would be helpful.

Thanks in advance,
Rovas Kram
Ranch Hand

Joined: Aug 08, 2003
Posts: 135
Since you overrode the 'characters' method, you should know what values are being passed to. Is it being called twice for the String in question?
[ August 23, 2004: Message edited by: Rovas Kram ]
William Brogden
Author and all-around good cowpoke

Joined: Mar 22, 2000
Posts: 13036
Rovas is exactly right. The characters method may be called ANY NUMBER of times for a given text field. You must provide for accumulating characters (say in a StringBuffer) until the endElement event.
The reason is that the parser reads in buffer-loads so if your text field is not complete in a buffer-load, the call to characters will have only the characters in that buffer.
I agree. Here's the link:
subject: XML SaxParser problem
It's not a secret anymore!