HTMLParser工具類v1.0

來源:互聯網
上載者:User
package com.jadyer.httpclient;import java.util.ArrayList;import java.util.List;import org.htmlparser.Node;import org.htmlparser.NodeFilter;import org.htmlparser.Parser;import org.htmlparser.nodes.TagNode;import org.htmlparser.util.NodeList;import org.htmlparser.util.ParserException;/** * HTMLParser工具類 * @see 所有jar如下 * @see filterbuilder.jar(以下5個jar取自HTMLParser官網下載的HTMLParser-2.0-SNAPSHOT-bin.zip) * @see htmllexer.jar * @see htmlparser.jar * @see sitecapturer.jar * @see thumbelina.jar * @version v1.0 * @history v1.0-->建立<code>parseTags()</code>和<code>parseTag()</code>方法 * @create Mar 10, 2013 12:38:12 PM * @author 玄玉<http://blog.csdn/net/jadyer> */public class HTMLParseUtil {/** * 解析具有某類屬性值的標籤列表 * @see 定義泛型--><code><T extends TagNode></code> * @see 使用泛型--><code>List<T>,Class<T></code> * @see 這裡定義了一個類型必須是某種TagNode的泛型T,並且返回的List也必須是泛型T * @see 而Class<T>的意思是傳給tagType的是什麼類型,所以返回給List<T>的就是什麼類型 * @see 比如傳進來的是org.htmlparser.tags.MetaTag.class,那麼返回的就是List<MetaTag> * @param inputHTML      被解析的HTML文本 * @param tagType        標籤的類型,內部類使用故final * @param attributeName  待解析的屬性名稱,內部類使用故final * @param attributeValue 待解析的屬性值,內部類使用故final */@SuppressWarnings({ "unchecked", "serial" })public static <T extends TagNode> List<T> parseTags(String inputHTML, final Class<T> tagType, final String attributeName, final String attributeValue){//建立一個HTML解析器Parser parser = new Parser();NodeList tagList = null;try {parser.setInputHTML(inputHTML);//它會自動檢測檔案內部<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>//parser.setEncoding("UTF-8");tagList = parser.parse(new NodeFilter(){@Overridepublic boolean accept(Node node){//這裡不需要if(node instanceof TagNode),因為上面已經定義了TagNode類型的泛型Tif(node.getClass()==tagType){//Node類型的實作類別中只有TagNode才能getAttribute()擷取屬性值,所以要將之打回原形T t = (T)node;//若傳入的屬性名稱是null,則認為是不需要尋找指定屬性值的標籤,而是單純的尋找某類型T的標籤//if(null == attributeName){//return true;//}if(null!=attributeValue && attributeValue.equals(t.getAttribute(attributeName))){return true;}}return false;}});} catch (ParserException e) {System.out.println("解析HTML文本時發生異常:" + e.getMessage());}List<T> tags = new ArrayList<T>();for(int i=0; i<tagList.size(); i++){T t = (T)tagList.elementAt(i); //提取真實tagtags.add(t);}return tags;}/** * 解析屬性值唯一的標籤 * @see 和上面那個方法差不多,傳給Class<T>的是什麼類型,那麼返回的就是什麼類型 */public static <T extends TagNode> T parseTag(String inputHTML, final Class<T> tagType, final String attributeName, final String attributeValue){List<T> tagList = parseTags(inputHTML, tagType, attributeName, attributeValue);if(null!=tagList && tagList.size()>0){return tagList.get(0);}else{return null;}}}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.