这个类是HTMLEditorKit的内部类,也是一个回调类,可以通过解释结果回调.我想用它里面的方法查找标签为title的元素的内容,不知道思路有没有错,请大家指教.下面我已经新建一个类继承了这个内部类.先重写它第一个方法获得开始标签为TITLE的pos;
public parser extends HTMLEditorKit.parserCallBack{
....
private int titleBegin;
private int titleEnd;
....
....
public void handleStartTag(HTML.Tag t,
MutableAttributeSet a,
int pos){
if (t == HTML.Tag.TITLE)
titleBegin=pos;
....
....
}
再重写它第二个方法,获得结束标签为TITLE的pos;
public void handleEndTag(HTML.Tag t,
int pos){
if(t.equals(HTML.Tag.TITLE))titleEnd=pos;
....
....
}
但是当我已经获得了TITLE两端位置后,不知道怎样提取两个位置之间的具体内容,并转化为String类型.这个内部类是HTMLEditorKit的内部类,如果我用this.getClass()方法获得当前对象,那获得的对象如果强制转换,应该用外部类HTMLEditorKit类型的?还是用HTMLEditorKit.parserCallBack类型的?因为刚开始学,可能问题有点弱,请大虾们指点,谢谢~~
public parser extends HTMLEditorKit.parserCallBack{
....
private int titleBegin;
private int titleEnd;
....
....
public void handleStartTag(HTML.Tag t,
MutableAttributeSet a,
int pos){
if (t == HTML.Tag.TITLE)
titleBegin=pos;
....
....
}
再重写它第二个方法,获得结束标签为TITLE的pos;
public void handleEndTag(HTML.Tag t,
int pos){
if(t.equals(HTML.Tag.TITLE))titleEnd=pos;
....
....
}
但是当我已经获得了TITLE两端位置后,不知道怎样提取两个位置之间的具体内容,并转化为String类型.这个内部类是HTMLEditorKit的内部类,如果我用this.getClass()方法获得当前对象,那获得的对象如果强制转换,应该用外部类HTMLEditorKit类型的?还是用HTMLEditorKit.parserCallBack类型的?因为刚开始学,可能问题有点弱,请大虾们指点,谢谢~~
public void handleText(char[] data,
int pos){...}
这个方法是当遇到HTML文本的时候自动调用的,之前的设的两个int变量其实没有什么用,只要设一个状态位就可以完成提取类似的HTML文本了
.例如我设了一个int titleStatus=-1;
public parser extends HTMLEditorKit.parserCallBack{
int titleStatus=-1;
....
//当遇到开始类标记时,会自动调用这个方法
public void handleStartTag(HTML.Tag t,
MutableAttributeSet a,
int pos){ if (t == HTML.Tag.TITLE)titleStatus=pos;//也可以定义为其它值,如1,23,不是-1就好了
...
..
}//当遇到结束类标记时,会自动调用这个方法:
public void handleEndTag(HTML.Tag t,
int pos){
if(t.equals(HTML.Tag.TITLE)) titleStatus=-1;//把titleStatus的值重新设为-1
}
//当遇到HTML文本的时候自动调用这个方法:
public void handleText(char[] data,
int pos){
if((titleBegin!=-1))//作一简单的判断,判断是否到了TITLE标签的开始,如果是的话,取出当前数据,传递出去,report是我定义好的一个接口
{ //这个方法遇到其它标记时会自动返回的,也就是说TITLE的终界自动确定了,data里的内容就是TITLE的内容了
String str=new String(data);
report.spiderFoundTitle(base,str);
}
}
可能有错,希望大家更正,谢谢~~