自定义HTMLParser的复合标签

import org.htmlparser.nodes.TagNode;

/**
 * <p>Title: Link标签解析类</p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2006</p>
 * <p>Company: 用于解析HTML文件的Link标签
 *    例如:解析"<head><link href='/Skin/DefaultSkin.css' rel='stylesheet' type='text/css'>..."
 *    getAttribute("rel") == "stylesheet"
 *    getLink() == "当前路径/Skin/DefaultSkin.css"
 *    getType() ==  "text/css"
 *    </p>
 * @author not attributable
 * @version 1.0
 */

public class LinkTypeTag extends TagNode {
    private static final String[] mIds = {"Link"};
    private static final String[] mEndTagEnders = {"head"};
    public String[] getIds() {
        return (mIds);
    }
    public String[] getEndTagEnders() {
        return (mEndTagEnders);
    }
   
    public String[] getEnders() {
     return super.getEnders();
    }

    public String getAttribute(String strTag) {
        return super.getAttribute(strTag);
    }


    public String getLink() {
        return getPage().getAbsoluteURL(super.getAttribute("href"));
    }
    public String getType() {
        return super.getAttribute("type");
    }
}
        HTMLParser将一个文档分成三种节点分别是:Remark(注释);Text(文本);Tag(标签)。而标签又分成两种分别是简单标签(Tag)和复合标签(CompositeTag),像<img><br/>这种标签称为简单标签,因为标签不会再包含其它内容。而像<a href="xxxx">Home</a>这种类型的标签,因为标签会嵌套文本或者其他标签的称为复合标签,也就是对应着CompositeTag这个类。简单标签的实现类很简单,只需要扩展Tag类并覆盖getIds方法以返回标签的识别文本,例如<img>标签应该返回包含"img"字符串的数组,具体的代码可以参考HTMLParser自带的ImageTag标签类的实现。复合标签事实上是对简单标签的扩展,HTMLParser在处理一个复合标签时需要知道该标签的起始标识以及结束标识,也就是我们在前面给出的源码中的两个方法getIds和getEnders,一般来讲,标签出现都是成对的,因此这两个方法一般返回相同的值。另外一个方法getEndTagEnders,这个方法用来返回父一级的标签名称,例如<tr>的父一级标签应该是<table>。这个方法的必要性在于HTML对格式的要求很不严格,在很多的HTML文档中的一些标签经常是有开始标识,但是没有结束标识,由于浏览器的超强适应能力使这种情况出现的很频繁,因此HTMLParser利用这个方法来辅助判断一个标签是否已经结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值