上次所说的使用Filter同时访问formtag和linktag是不行的,实际上有这样一种东西,可以访问任意tag--------Nodevisitor。下边这个程序是DOC上边的,我只是改了下,使得可以符合我的需要,访问linktag和formtag:
import org.htmlparser.Parser;
import org.htmlparser.Tag;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.tags.FormTag;
import org.htmlparser.Text;
import org.htmlparser.util.ParserException;
import org.htmlparser.visitors.NodeVisitor;
public class MyVisitor extends NodeVisitor
{
public MyVisitor ()
{
}
public void visitTag (Tag tag)
{
if (tag instanceof LinkTag)
{
System.out.println("a ->" + ((LinkTag)tag).extractLink());
}
else if (tag instanceof FormTag)
{
System.out.println("form ->" + ((FormTag)tag).extractFormLocn());
}
}
public static void main (String[] args) throws ParserException
{
Parser parser = new Parser (args[0]);
parser.setEncoding("GB2312");
NodeVisitor visitor = new MyVisitor ();
parser.visitAllNodesWith (visitor);
}
}
解析器会自动地调用visitTag方法,对每个tag进行判断,对需要的进行必要的操作。
好东西吧,再研究更有意义点的操作,由他发散就行了。
import org.htmlparser.Parser;
import org.htmlparser.Tag;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.tags.FormTag;
import org.htmlparser.Text;
import org.htmlparser.util.ParserException;
import org.htmlparser.visitors.NodeVisitor;
public class MyVisitor extends NodeVisitor
{
public MyVisitor ()
{
}
public void visitTag (Tag tag)
{
if (tag instanceof LinkTag)
{
System.out.println("a ->" + ((LinkTag)tag).extractLink());
}
else if (tag instanceof FormTag)
{
System.out.println("form ->" + ((FormTag)tag).extractFormLocn());
}
}
public static void main (String[] args) throws ParserException
{
Parser parser = new Parser (args[0]);
parser.setEncoding("GB2312");
NodeVisitor visitor = new MyVisitor ();
parser.visitAllNodesWith (visitor);
}
}
解析器会自动地调用visitTag方法,对每个tag进行判断,对需要的进行必要的操作。
好东西吧,再研究更有意义点的操作,由他发散就行了。