Java HTML Parser应用

最近因为项目需要,研究了java html parser类库的应用。记录下使用要点:

主要的类说明:

1、Parser类

解析器主类,负责载入HTML代码并解析。

2、Node接口

用来表征在解析过程中使用的语法单元。示例如下段html代码:

<span> ----Tag node

text ----Text Node

</span>

文本和标签都是独立的node元素。text文本是标签span的child node

3、NodeFilter

标签过滤器接口,用来在parser或NodeList中过滤出需要的某一类node。

4、NodeList

数据结构,表示Node的集合

需要特别注意的地方:

Parser和NodeList都有一个名为extractAllNodesThatMatch(NodeFilter filter)的方法用来过滤出符合某个条件的node,但是其内部的实现机制不同。

Parser是在解析器的功能基础上使用Iteror实现。每次调用该方法后需要执行reset方法,否则会影响下一次调用的结果。

而NodeList是在内部的数组上进行循环判断,因此各次调用之间不会互相影响,效率也比Parser的高,土建使用。

代码示例:

实现getElementByID功能

<code>

public class NodeIDFilter implements NodeFilter {

 private String id;
 public NodeIDFilter(String id)
 {
 this.id=id;
 }
 public boolean accept(Node node) {

 if(node instanceof Tag)
 {
 if(!((Tag)node).isEndTag())
 {
 String s=((Tag)node).getAttribute("id");
 if(s!=null)
 return s.equals(this.id);
 }
 }
 return false;
 // throw new UnsupportedOperationException("Not supported yet.");
 }

}

public class MHTMLParser

{

....

protected Node getElementById(String id) throws ParserException
 {
 //this.myparser.reset();
 if(this.mNodeList==null||this.mNodeList.size()==0) return null;
 NodeIDFilter nodef = new NodeIDFilter(id);
 NodeList nl = this.mNodeList.extractAllNodesThatMatch(nodef,true);
 //
 if (nl.size() != 0)
 {
 return nl.elementAt(0);
 }
 return null;
 }
 

}

</code>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值