<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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 閱讀(1972) 評論(0)  編輯  收藏 所屬分類: Java技術

    主站蜘蛛池模板: 国产成人精品免费大全| 国产av无码专区亚洲av毛片搜| 国产精品免费大片一区二区| 日本人的色道www免费一区| 日本亚洲色大成网站www久久| 中文字幕无码免费久久99| 亚洲免费一级视频| 无码免费午夜福利片在线| 亚洲av无码专区在线| 大学生一级特黄的免费大片视频| 色噜噜亚洲男人的天堂| 嫩草视频在线免费观看| 九九精品国产亚洲AV日韩| 亚洲精品黄色视频在线观看免费资源| 美女羞羞免费视频网站| 亚洲美日韩Av中文字幕无码久久久妻妇| 四虎精品免费永久免费视频| 日日噜噜噜噜夜夜爽亚洲精品| 岛国精品一区免费视频在线观看| 亚洲av中文无码乱人伦在线播放| 永久免费av无码网站yy| 亚洲日本在线免费观看| 国产亚洲一区区二区在线 | 亚洲一级毛片在线播放| 女性自慰aⅴ片高清免费| 美女尿口扒开图片免费| 久久久久国产亚洲AV麻豆| 一级毛片aaaaaa免费看| 亚洲国产成人精品久久 | 久草视频在线免费| 亚洲AV无码一区二区三区久久精品| 免费jjzz在线播放国产| 成全动漫视频在线观看免费高清版下载| 亚洲一本综合久久| 在线jlzzjlzz免费播放| 91成人免费观看在线观看| 亚洲国产成人久久三区| 亚洲国产成人精品无码久久久久久综合 | 1000部啪啪毛片免费看| 国产精品亚洲av色欲三区| 国产v亚洲v天堂无码网站|