CODE
<?xml version='1.0' encoding='ISO-8859-1' ?>
<toc version="1.0">
<tocitem target="booktoca_htm_6017" text="Introduction">
<tocitem target="booktoca_htm_6019" text="What is Transmitter
Reporter?"/>
<tocitem target="booktoca_htm_6021" text="Finding the Report You
Need"/>
<tocitem target="booktoca_htm_6023" text="Using Help"/>
</tocitem>
</toc>
<toc version="1.0">
<tocitem target="booktoca_htm_6017" text="Introduction">
<tocitem target="booktoca_htm_6019" text="What is Transmitter
Reporter?"/>
<tocitem target="booktoca_htm_6021" text="Finding the Report You
Need"/>
<tocitem target="booktoca_htm_6023" text="Using Help"/>
</tocitem>
</toc>
To handle tracking what level in the tree I'm at, I thought I'd use a stack
so my handler is as follows:
CODE
public class TOCHandler extends HandlerBase
{
private java.util.Stack stack;
public void startElement(String name, AttributeList atts)
{
System.out.println("Start element: " + name);
if (name.equals("tocitem"))
{
String text = atts.getValue("text");
if (stack.empty())
{
symantec.itools.awt.TreeNode child = new
symantec.itools.awt.TreeNode(text, Contents);
Contents.append(child);
stack.push(child);
}
else
{
symantec.itools.awt.TreeNode child = new
symantec.itools.awt.TreeNode(text, Contents);
symantec.itools.awt.TreeNode parent =
(symantec.itools.awt.TreeNode) stack.peek();
stack.push(child);
Contents.addChild(child, parent);
}
}
}
public void endElement(String name)
{
System.out.println("End element: " + name);
if (name.equals("toc"))
Contents.redraw();
if (name.equals("tocitem"))
stack.pop();
}
}
{
private java.util.Stack stack;
public void startElement(String name, AttributeList atts)
{
System.out.println("Start element: " + name);
if (name.equals("tocitem"))
{
String text = atts.getValue("text");
if (stack.empty())
{
symantec.itools.awt.TreeNode child = new
symantec.itools.awt.TreeNode(text, Contents);
Contents.append(child);
stack.push(child);
}
else
{
symantec.itools.awt.TreeNode child = new
symantec.itools.awt.TreeNode(text, Contents);
symantec.itools.awt.TreeNode parent =
(symantec.itools.awt.TreeNode) stack.peek();
stack.push(child);
Contents.addChild(child, parent);
}
}
}
public void endElement(String name)
{
System.out.println("End element: " + name);
if (name.equals("toc"))
Contents.redraw();
if (name.equals("tocitem"))
stack.pop();
}
}
I get a SAXException of type null when the first check to stack.empty() happens? Does it have something to do with the fact that the stack methods are declared synchronized?
Hope there some java lovers out there to help.
Cheers