有關於用JTidy處理HTML轉化爲標準的XHTML或者XMl出現空的問題

        最近在項目中遇到了一個無法解決的問題,是有關於HTML源碼轉化爲標準格式的XHTML或者是XML數據的問題,這是項目中遇到的一個問題。
        JTidy是一個java的用於處理HTML源碼的工具,由於HTML是半結構化的,所以其中有很多的不好的或者其他不規範標準的格式,如沒有結束標籤等等,JTidy可以去除這些不好的格式,或者補全結束標籤等這樣的功能,把半結構化的HTML轉化爲結構化的,標準的XHTML結構和XML結構,但是最近在使用時出現了問題。
Document doc = null;
		try {
			InputStream in = String2InputStream(htmlStr);
			// 設置 tidy ,準備轉換
			Tidy tidy = new Tidy();
			tidy.setDocType(htmlStr);
			tidy.setXmlOut(true); // 輸出格式 xml
//			//tidy.setDropFontTags(true); // 刪除字體節點
//			tidy.setDropEmptyParas(true); // 刪除空段落
//			tidy.setFixComments(true); // 修復註釋
//			tidy.setFixBackslash(true); // 修復反斜杆
			tidy.setMakeClean(true); // 刪除混亂的表示
			tidy.setPrintBodyOnly(true);
//			tidy.setQuoteNbsp(false); // 將空格輸出爲  
//			tidy.setQuoteMarks(false); // 將雙引號輸出爲 "
//			tidy.setQuoteAmpersand(true); // 將 & 輸出爲 &
//			tidy.setShowWarnings(false); // 不顯示警告信息
			tidy.setInputEncoding("UTF-8"); // 輸入的流的編碼爲utf-8
			tidy.setOutputEncoding("UTF-8"); // 輸出流的編碼爲utf-8
//
			doc = tidy.parseDOM(in, null); // 通過 JTidy 將 HTML 網頁解析爲
			in.close(); // W3C 的 Document 對象

        這是處理時的代碼,首先參數中的htmlStr是抓取的HTML的源代碼,然後進行Tidy的設置,利用tidy處理HTML源碼,使其規範化或者標準化,然後轉化爲dom結構,對其進行處理後在轉化爲XML格式的流,但是最近碰到的問題是在處理後結構是空,也就是doc這個變量是空的,在轉化爲XML後輸出爲空。
       經過調試後發現,這是tidy處理時出現了問題,這種問題的原因就在於原有的HTML代碼的格式過於不規範,已經超出了tidy能後處理的能力,雖然他很強大,但是還沒有智能到無所不能的地步,在用tidy處理並轉化爲dom結構是,由於HTML標籤轉化爲dom結構中的結點,但是卻沒有正常轉化,使其結點的層次混亂,最後再轉化爲XML格式時就出現了空的情況,所以如果出現了處理後爲空的情況,可能就是原有的HTML代碼的問題,這個解決比較困難,除非不用tidy而用其他的方法。
        但是大部分情況下,tidy是可以處理的,最近做了好長時間才遇到了在處理某個網站的時候出現了這種問題,原因在於網站的HTML源碼太亂,這種情況還是出現比較少的,但是遇到了就沒辦法了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章