HTMLParser的visitor访问方式详解
来源:互联网 发布:pon网络由什么组成 编辑:程序博客网 时间:2024/05/17 05:06
参考文档:http://allenj2ee.iteye.com/blog/222457 ,希望与大家分享
从简单方面的理解,Filter是根据某种条件过滤取出需要的Node再进行处理。Visitor则是遍历内容树的每一个节点,对于符合条件的节点进行处理
。实际的结果异曲同工,两种不同的方法可以达到相同的结果:
1、
package html;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import org.htmlparser.Parser;
import org.htmlparser.Remark;
import org.htmlparser.Tag;
import org.htmlparser.Text;
import org.htmlparser.util.ParserException;
import org.htmlparser.visitors.NodeVisitor;
public class TestVisitor {
public static void testVisitor (String url){
try {
//==============连接方法一 ==================
URL l_url = new java.net.URL(url);
HttpURLConnection l_connection =(HttpURLConnection) l_url.openConnection();
//通过指定URLConnection对象创建Parser对象
Parser parser = new Parser(l_connection);
//==============连接方法二 ==================
//建立连接
// HttpURLConnection l_connection =(HttpURLConnection) l_url.openConnection();
//通过指定URLConnection对象创建Parser对象
// Parser parser = new Parser();
// parser.setURL(url);
parser.setEncoding(parser.getEncoding());
NodeVisitor visitor = new NodeVisitor (true, false){
public void visitTag(Tag tag){
System.out.println("tagname="+tag.getTagName()+"--text="+tag.getText()+"--
class="+tag.getPage());
}
public void visitStringNode (Text string) {
System.out.println("This is Text:"+string);
}
public void visitRemarkNode (Remark remark) {
System.out.println("This is Remark:"+remark.getText());
}
public void beginParsing () {
System.out.println("beginParsing");
}
public void visitEndTag (Tag tag){
System.out.println("visitEndTag:"+tag.getText());
}
public void finishedParsing () {
System.out.println("finishedParsing");
}
};
parser.visitAllNodesWith(visitor);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
testVisitor("http://www.hao123.com/");
}
}
2、可以看到,开始遍历所以的节点以前,beginParsing先被调用,然后处理的是中间的Node,最后在结束遍历以前,finishParsing被调用。因为我
设置的 recurseChildren和recurseSelf都是false,所以Visitor没有访问子节点也没有访问根节点的内容。
3、先把recurseSelf设置成true,看看会发生什么。
NodeVisitor visitor = new NodeVisitor( false, true) {
可以看到,HTML页面的第一层节点都被调用了。
4、我们再用下面的方法调用看看:
NodeVisitor visitor = new NodeVisitor( true, false)
可以看到,所有的子节点都出现了,除了刚刚例子里面的两个最上层节点This is Tag:head和This is Tag:html
想让它们都出来,只需要
NodeVisitor visitor = new NodeVisitor( true, true) {
- HTMLParser的visitor访问方式详解
- HTMLParser的filter访问方式详解
- HTMLParser使用详解(4)- 通过Visitor访问内容
- HTMLParser使用详解(4)- 通过Visitor访问内容
- HTMLParser使用详解(4)- 通过Visitor访问内容
- HTMLParser使用详解(4)- 通过Visitor访问内容
- HTMLParser使用详解(4)- 通过Visitor访问内容
- HTMLParser使用详解(4):通过VISITOR访问内容
- HTMLParser使用详解(4) - 通过Visitor访问内容
- HTMLParser使用详解(4)- 通过Visitor访问内容
- HTMLParser使用visitor访问html dom树节点的原理
- HtmlParser visitor
- HtmlParser的详解
- htmlparser详解
- HTMLParser使用详解(3)- 通过Filter访问内容
- HTMLParser使用详解(3)- 通过Filter访问内容
- HTMLParser使用详解(3)- 通过Filter访问内容
- HTMLParser使用详解(3)- 通过Filter访问内容
- 我的测试能力并不高
- DNS Tools
- LNK2005错误——重复定义错误
- 程序员的责任
- 项目开发中的一些体会
- HTMLParser的visitor访问方式详解
- 项目建立管理
- 某小学一年级暑假作业的一道数学题解答
- JQuery 调用ashx文件和WebMethod方法总结
- u盘装系统方法
- HD教程系列一:解密高清HD视频编码格式与封装方式
- [Mozilla] JavaXPCOM 的jar 包概述
- launcher添加一个仿Mac的dock
- TCPL(The C Programming Language)读书笔记 第五章 指针与数组