作业帮 > 综合 > 作业

htmlparser Visitor和filter的区别是什么

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/15 10:37:22
htmlparser Visitor和filter的区别是什么
htmlparser 有两种访问方式,一个是visitor 还有一个是filter,那么这两者到底有什么区别呢?或者说为什么要分两种方式
我没使用过HtmlParser,你是指 sourceforge 网站上那个开源的的 HtmlParser API
一般说概念上讲 visitor 只是表示,”伙计,当前我正在看到XXX,你想了解这个XXX么?“,它表示你当前正在扫描一个节点时触发了事件,告诉你当前正在哪个位置,比如,正遍历 节点的收尾处;
而 filter 则只告诉你正在准备遍历一个节点,你得告诉 API 这个节点是否符合条件(它将返回到结果集中,如果不符合条件就不会返回到结果集中).比如一个 NodeClassFilter 当然会有一个条件来指明我们需要命中哪个 java class 类型的 Node (TextNode,TagNode,RemarkNode,...),而一个 CssSelectorNodeFilter 而是找出使用了指定的 Css selector 参数的节点.这里的 Filter 一般用来搜索或迭代,比如搜索符合条件的子节点或迭代一个元素的所有子节点时我们可以给定条件只看符合条件的节点.
当 XML 在解释时会触发事件,Visitor 就相当于以前的 SAX 的 startElement / endElement 事件一样,每到事件出现时就会调用 Visitor 的对应方法;而 Filter 则是到了某个可能的节点时都询问是否符合条件.
再问: 这个这个。。。看上去很模糊啊,或者能说说应用场景吗。。。或者告诉我哪里能看到相关知识 网上查不到啊 上面的理解好像是说在visitor方式下,会访问每一个节点,然后判断是否是我们需要的节点,如果是那么就调用事先定义好的方法,然后在filter方式下只有找到了对应的节点才会调用方法? 因为我看见的例子里面基本都是 访问页面->提取节点->处理数据 所以看不出差别呀...这个到底属于哪一块的知识呢..
再答: visitor 只是通知我们访问了这个节点,而 filter 则是在访问这个节点时询问我们这个节点是否符合条件。 访问页面》提取节点》处理数据,这个过程中,如果”提取节点“本身是有条件的呢? 像我们访问一个文件系统目录时 File.listFiles() 方法就可以接收 FileFilter 或 FilenameFilter 来决定我们是否希望在搜索目录下的文件时过滤出我们想返回哪些文件。 Html 解析时也同样的道理,可能你只想看少数节点的数据。 我的猜想是 Visitor 本身可能表示不支持 Filter 的访问,也就是所有节点都会遍历到;而 Filter 也是遍历所有的节点,并在这些节点上触发”你觉得我正在访问的节点是否符合你的条件“这个事件,如果我回答”是“那么它将出现在返回的结果集中。