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利用這個方法來輔助判斷一個標籤是否已經結束。