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利用这个方法来辅助判断一个标签是否已经结束。