首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

擴展 HTMLParser 處理自定義標籤 (以 WML anchor/go 為例)

     編輯:J2ME

背景

HTMLParser (開源 HTML 解析庫) 內建豐富標籤類 (含 JSP/ASP 動態標籤),但對 WML、XML 等自定義標籤無內建支援。本文示範如何擴展解析 <anchor>...<go href=...> 等 WML 連結標籤。

範例 WML 片段


現在登入
  
    
    
  

返回首頁

目標:同時提取 <a href> 與 <go href> 連結。

擴展步驟

  1. 建立自定義標籤類 繼承 CompositeTag (複合標籤,有開始/結束標籤且可巢狀)。
  2. 覆寫三個關鍵方法:

public class WmlGoTag extends CompositeTag {
    private static final String[] IDS = {"GO"};
    private static final String[] END_TAG_ENDERS = {"ANCHOR"}; // 父標籤

    public String[] getIds() { return IDS; }           // 開始標籤識別
    public String[] getEnders() { return IDS; }        // 結束標籤識別 (同開始)
    public String[] getEndTagEnders() { return END_TAG_ENDERS; } // 父標籤輔助判斷結束

    public String getLink() { return getAttribute("href"); }
    public String getMethod() { return getAttribute("method"); }
}

註:HTML 格式寬鬆需 getEndTagEnders 輔助;WML/XHTML 嚴格則可省略。

  1. 註冊標籤工廠:

Parser parser = new Parser();
PrototypicalNodeFactory factory = new PrototypicalNodeFactory();
factory.registerTag(new WmlGoTag());
parser.setNodeFactory(factory);
  1. 定義節點過濾器 擷取 LinkTag (內建) 與 WmlGoTag (自定義):

NodeFilter linkFilter = new NodeFilter() {
    public boolean accept(Node node) {
        return node instanceof LinkTag || node instanceof WmlGoTag;
    }
};
NodeList list = parser.extractAllNodesThatMatch(linkFilter);
  1. 處理結果:

for (Node n : list.toNodeArray()) {
    if (n instanceof LinkTag) System.out.println("LINK: " + ((LinkTag)n).getLink());
    else if (n instanceof WmlGoTag) System.out.println("GO: " + ((WmlGoTag)n).getLink());
}

輸出結果


GO: /wap/user.do
LINK: /wap/index.vm

類別結構說明

HTMLParser 節點層級:Node → Tag (簡單標籤如 <img>) / CompositeTag (複合標籤如 <a>...</a>)。自定義標籤依類型繼承對應基類,覆寫識別方法即可。

結語

HTMLParser 開源碼本身即最佳教材,參考內建 ImageTag、LinkTag 等實現可快速掌握擴展技巧,支援任意 XML/HTML/WML 自定義標籤解析。

本文來自編程入門網:原文連結

  1. 上一篇文章: No
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved