|
原帖由 fry_2006 于 2008-11-23 19:52 发表 ![]()
太感谢你们了,你们都是热心肠得人!
还没有解决,还是这个问题。实现没办法了,我用过滤器XMLFilter做的
public class DataItemFilter extends XMLFilterImpl {
public void startElement(String namespaceURI, String localName, String qName, Attributes attributes) throws SAXException
{
System.out.println(qName+"元素开始");
dfaStack.push(dver);//把DFA的起始顶点压入栈中,这个顶点是存在的
System.out.println(dfaStack.peek());//能够取出刚才压入得元素,说明栈里确实压入了这个元素。
}
}
压入以后,栈中有了元素,但是在另一个类中
public class ReportingContentHandler implements ContentHandler{
DataItemFilter datafilter=new DataItemFilter();//首先创建了上面得类对象
public void startElement(String namespaceURI, String localName, String qName, Attributes attributes) throws SAXException
{
System.out.println(qName+"元素开始");
datafilter.dfaStack.peek(dver);//
}
}
这时候提示无法从dfaStack中取出,栈是空的。
我就感觉是对象引用过去了,但是没用把值带过去,这个我不知道该怎么写。谢谢你们了,我现在特别着急。
哈哈,很明显的错误。请看:
在class ReportingContentHandler 中
DataItemFilter datafilter=new DataItemFilter();//首先创建了上面得类对象。你这里初始化了这个类,所以在这里他是空的。
然后,你在 ReportingContentHandler.startElement() 中 call
datafilter.dfaStack.peek(dver);
// 这当然是空的了。你都没放东西在里面,怎么拿得出来呢?你的确放了,但放到别的地方去了。
改成如下:
public class DataItemFilter extends XMLFilterImpl {
private DataItemFilter datafilter = null;
public void startElement(String namespaceURI, String localName, String qName, Attributes attributes) throws SAXException
{
if(datafilter == null)
datafilter=new DataItemFilter()
System.out.println(qName+"元素开始");
dfaStack.push(dver);//把DFA的起始顶点压入栈中,这个顶点是存在的
System.out.println(dfaStack.peek());//能够取出刚才压入得元素,说明栈里确实压入了这个元素。
}
public DataItemFilter getDatafilter(){ return datafilter; }
}
public class ReportingContentHandler implements ContentHandler{
DataItemFilter datafilter = null;
public void startElement(String namespaceURI, String localName, String qName, Attributes attributes) throws SAXException
{
System.out.println(qName+"元素开始");
if(datafilter != null)
datafilter.dfaStack.peek(dver);//
}
public void set setDatafilter(DataItemFilter filter){ datafilter = filter; }
}
现在,在你的程序中,你就可以用了,在某个 function 里(英文里我们通常把它叫 driver),如下:
DataItemFilter item = new DataItemFilter ();
item.startElement(.......);
ReportingContentHandler report = new ReportingContentHandler ()
report.setDatafilter(item.getDataFilter());
report.sartElement(.......); // 在这里面,你就可以取出东西来了。
哈,你想想,你把东西放到你哥哥的口袋里,怎么能在你弟弟的荷包中取出来呢?
[ 本帖最后由 hongjinusa 于 2008-11-23 22:39 编辑 ] |
|