File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
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

Win a copy of Head First Android this week in the Android forum!
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: 12982
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
jQuery in Action, 3rd edition