自訂HTMLParser的複合標籤

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.