Change Dir

          先知cd——熱愛生活是一切藝術的開始

          統計

          留言簿(18)

          積分與排名

          “牛”們的博客

          各個公司技術

          我的鏈接

          淘寶技術

          閱讀排行榜

          評論排行榜

          JTidy的一些小tips

          今天看了一下JTidy的使用,目的就是為了格式化一個不標準的html到標準的xhtml。

          JTidy是一個用java寫的HTML語法檢查器,用JTidy可以檢查并修正語法不正確的html,同時還可以對htmlDOM進行分析。Xhtmlhtml有很多不同,其中幾個主要的區別是:

          1.    XHTML元素必須被正確的嵌套。

          2.    XHTML元素必須被關閉。

          3.    標簽名必須用小寫字幕。

          4.    XHTML文檔必須有根元素。

          想想這些限制也不無道理,這樣的限制可以將html格式化為格式嚴謹的xml

          JTidy的使用也非常簡單,短短的幾行代碼就可以實現從原html到格式化好的xhtml

           1Tidy tidy = new Tidy();
           2
           3        try {
           4            FileInputStream fis = new FileInputStream(
           5                    "D:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\webapps\\ROOT\\test2.html");
           6            InputStreamReader isr = new InputStreamReader(fis,"gb2312");
           7            OutputStream fos = new FileOutputStream(
           8                    "D:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\webapps\\ROOT\\test2XHTML.html");
           9            OutputStreamWriter osw = new OutputStreamWriter(fos,"gb2312");
          10            Document doc = tidy.parseDOM(isr, osw);
          11            File tmpFile = new File(outFileName);
          12            if(tmpFile.length()==0)
          13                tidy.pprint(doc, out0);
          14            // 轉換完成
          15        }
           catch (java.io.FileNotFoundException e) {
          16            System.out.println(e.getMessage());
          17        }
           catch (UnsupportedEncodingException e) {
          18            // TODO Auto-generated catch block
          19            e.printStackTrace();
          20

           

          其中有幾個問題需要說明一下。理論上,在定義了tidy對象后,調用tidy.parse(in,out)或者tidy.parseDOM(in,out)就可以完成對輸入的格式化,將其輸出到輸出流上。Parse返回一個Node,而parseDOM返回一個Document。如果直接用InputStreamOutputStream,那么對于編碼的控制上,一般只能在tidy中控制了,而Tidy的內置編碼中,簡體中文沒有設置。用起來不方便。如何實現中文頁面輸入,中文頁面產出是一個問題,網上提出了一種解決方法,通過利用生成一個中間UTF-8文件,在將其轉到輸出流上,可以完成中文的輸入。另一種實現就是利用最新的JTidy實現了parse(reader,writer)方法。因為支持readerwriter,所以可以像上面的代碼一樣,在包裝輸入流和輸出流的時候,進行編碼的設定。這樣可以利用很短的代碼完成中文亂碼問題的解決,同時在效率上也要高于生成中間文件的方法。

          至于在完成parse后的一個臨時文件的作用是在實踐中,發現有時候會遇到JTidy完成parsedocument對象存在,但是輸出流沒有東西。需要調用pprint才會將其輸出。而什么時候調用pprint,我想到的方法就是判斷輸出文件是否為0.目前的情況就是要么輸出文件,但是空,即長度為0,要么完成了格式化,能正確輸出。因此,加一個if判斷可以解決通用的情況。

          posted on 2011-04-19 21:33 changedi 閱讀(1977) 評論(0)  編輯  收藏 所屬分類: Java技術

          主站蜘蛛池模板: 嵊州市| 泽库县| 颍上县| 固安县| 曲沃县| 娄底市| 扶风县| 嘉定区| 宝山区| 沂源县| 莱州市| 上林县| 若尔盖县| 大理市| 赫章县| 工布江达县| 潢川县| 桐梓县| 蓝山县| 永康市| 体育| 工布江达县| 铜川市| 南乐县| 巍山| 兴山县| 将乐县| 墨脱县| 台安县| 礼泉县| 凌海市| 景东| 盐城市| 石棉县| 伊川县| 庆城县| 涞源县| 宜兴市| 洮南市| 开封市| 武冈市|