atitit. java jsoup html table的讀取解析 總結html
1. 兩個大的parser ,,,jsoup 跟個 htmlparser 1java
2. 資料比較 1node
4. 解析並提取 HTML 元素的模式( 選擇器 and DOM 方式 ) 2json
5. html修改 2app
7.1. html解析 3.net
7.2. html修改 3code
html table的讀取
jsoup 百度爲您找到相關結果約321,000個
htmlparser 百度爲您找到相關結果約113,000個
運用 jsoup 對 HTML 文檔進行解析和操做(比HTMLParser好)
Java 程序在解析 HTML 文檔時,相信你們都接觸過 htmlparser 這個開源項目,我曾經在 IBM DW 上發表過兩篇關於 htmlparser 的文章,分別是:從 HTML 中攫取你所需的信息和?擴展 HTMLParser 對自定義標籤的處理能力。但如今我已經再也不使用 htmlparser 了,緣由是 htmlparser 不多更新,但最重要的是有了 jsoup 。
做者:: 老哇的爪子 Attilax 艾龍, EMAIL:1466519819@qq.com
轉載請註明來源: http://blog.csdn.net/attilax
這部分涉及一個 HTML 解析器最基本的功能,但 jsoup 使用一種有別於其餘開源項目的方式――選擇器,咱們將在最後一部分詳細介紹 jsoup 選擇器,本節中你將看到 jsoup 是如何用最簡單的代碼實現。
不過 jsoup 也提供了傳統的 DOM 方式的元素解析,看看下面的代碼
修改數據
在解析文檔的同時,咱們可能會須要對文檔中的某些元素進行修改,例如咱們能夠爲文檔中的全部圖片增長可點擊連接、修改連接地址或者是修改文本等。
下面是一些簡單的例子:
清單 4.
doc.select("div.comments a").attr("rel", "nofollow"); // 爲全部連接增長 rel=nofollow 屬性 doc.select("div.comments a").addClass("mylinkclass"); // 爲全部連接增長 class=mylinkclass 屬性 doc.select("img").removeAttr("onclick"); // 刪除全部圖片的 onclick 屬性 doc.select("input[type=text]").val(""); // 清空全部文本輸入框中的文本 |
道理很簡單,你只須要利用 jsoup 的選擇器找出元素,而後就能夠經過以上的方法來進行修改,除了沒法修改標籤名外(能夠刪除後再插入新的元素),包括元素的屬性和文本均可以修改。
修改完直接調用 Element(s) 的 html() 方法就能夠獲取修改完的 HTML 文檔。
與 htmlparser 項目不一樣的是,jsoup 並無爲 HTML 元素定義一個對應的類,通常一個 HTML 元素的組成部分包括:節點名、屬性和文本,jsoup 提供簡單的方法供你本身檢索這些數據,這也是 jsoup 保持瘦身的緣由。
而在元素檢索方面,jsoup 的選擇器簡直無所不能,
這是 jsoup 真正讓我折服的地方,jsoup 使用跟 jQuery 如出一轍的選擇器對元素進行檢索,以上的檢索方法若是換成是其餘的 HTML 解釋器,至少都須要不少行代碼,而 jsoup 只須要一行代碼便可完成。
jsoup 的選擇器還支持表達式功能,咱們將在最後一節介紹這個超強的選擇器。
prj.wechatadm4prp
package com.attilax.html;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
//import com.attilax.cc.Document;
import com.attilax.io.pathx;
import com.attilax.lang.core;
import com.attilax.lang.json.JsonX;
import com.attilax.util.AngularJsX;
@SuppressWarnings("all")
public class HtmlX {
public static void main(String[] args) {
Stringjsppath="applyInstall\\appinst_list.jsp";
jsppath="aa/bb";
jsppath=jsppath.replaceAll("/", "\\\\");
System.out.println(jsppath);
List li=getTitlesMap(jsppath,"tabid1","utf-8");
System.out.println(JsonX.toJsonStrO88(li));
}
/**
*
* @param jsppath %app%/path
* @param tableId
* @param htmlEncode
* @return
*/
public static List<Map> getTitlesMap(String jsppath, String tableId,String htmlEncode) {
jsppath=pathx.delWebappPrefix(jsppath);
jsppath=jsppath.replaceAll("/", "\\\\");
jsppath=pathx.webAppPath()+"\\"+jsppath;
List li=new ArrayList();
File input = new File(jsppath);
try {
Document doc = Jsoup.parse(input, htmlEncode, "http://example.com/");
Element tab_elmt=doc.getElementById(tableId);
Elements trs= tab_elmt.getElementsByTag("tr");
Element titleTr=trs.get(0);
Element fldTr=trs.get(1);
Elements tds=titleTr.getElementsByTag("td");
if(tds.size()==0)
tds=titleTr.getElementsByTag("th");
Elements tds_fld=fldTr.getElementsByTag("td");
for(int i=0;i<tds.size();i++)
{
Element td=tds.get(i);
Map m=new HashMap();
m.put("title", td.text());
String fld1=tds_fld.get(i).text();
String fld=AngularJsX.getFld_sf(fld1);
m.put("fld", fld);
if(fld.length()>0)
li.add(m);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
return li;
}
}
參考
運用 jsoup 對 HTML 文檔進行解析和操做(比HTMLParser好) _HTML_CSS_代碼迷.htm
使用 jsoup 對 HTML 文檔進行解析和操做.htm