jhengfei
          愛JAVA,愛生活

          最近要從網頁中提取信息,想先把html轉換成標準的xml格式,然后方便使用dom4j進行后續的分析,試用了不少現成的類庫,JTidy、NekoHTML、HTML Parser、Jericho,最后還是使用了JTidy。

          只是r8 snapshot還只是一個nightly builds,前面的r7版更已經是4年前的事了,這個項目就這樣荒廢了?可能是參與的人太少又或者是覺得已經成熟?

          JTidy提供了一個語法檢查器和標簽補償器,能夠對各種亂七八糟的html進行修復,使之符合xhtml標準。

          r8 snapshot相對于r7改變了一些參數的設置方法,特別是在字符編碼處理上,用setInputEncoding和setOutputEncoding方法來確定輸入和輸出文件的字符編碼,可以使用任何有效的Java編碼名稱,這就比以前的強多了。

          總體上解析的結果還不錯,只是有些地方還需要對生成文件進行手工調整,或者自己再編一段代碼處理一下,已經不是大問題了。

          一些常用的參數設置:

          setAltText(java.lang.String altText)?
          加上默認的alt屬性值
          setBreakBeforeBR(boolean breakBeforeBR)
          在換行<br />之前加一空行
          setCharEncoding(int charencoding)
          已廢棄
          setConfigurationFromFile(java.lang.String filename)
          從文件中讀取配置信息
          setConfigurationFromProps(java.util.Properties props)
          從properties中讀取配置信息
          setErrfile(java.lang.String errfile)
          錯誤輸出文件
          setFixBackslash(boolean fixBackslash)
          URL中用/取代\
          setForceOutput(boolean forceOutput)
          不管生成的xml是否有錯,強制輸出。
          setHideComments(boolean hideComments)?
          結果中不生成注釋
          setInputEncoding(java.lang.String encoding)
          輸入編碼
          setLogicalEmphasis(boolean logicalEmphasis)
          用em替代i,strong替代b
          setMessageListener(TidyMessageListener listener)
          加入一個TidyMessageListener監聽器
          setOnlyErrors(boolean onlyErrors)?
          只輸出錯誤文件
          setOutputEncoding(java.lang.String encoding)?
          輸出編碼
          setPrintBodyOnly(boolean bodyOnly)?
          只輸出body中的部分
          setRepeatedAttributes(int repeatedAttributes)?
          重復屬性的處理
          setSpaces(int spaces)?
          每行前的空格數,就是縮進格式
          setTidyMark(boolean tidyMark)?
          是否生成tidy標記
          setTrimEmptyElements(boolean trimEmpty)?
          不輸出空元素
          setUpperCaseAttrs(boolean upperCaseAttrs)?
          屬性變大寫
          setUpperCaseTags(boolean upperCaseTags)?
          標記變大寫
          setWraplen(int wraplen)?
          多長換行
          setXHTML(boolean xhtml)?
          輸出xhtml
          setXmlOut(boolean xmlOut)
          輸出xml
          setXmlPi(boolean xmlPi)?
          文件頭輸出xml標記
          setXmlSpace(boolean xmlSpace)
          加入xml名字空間屬性

          使用方法極為easy,定義輸入輸出流,用tidy.parse()轉換就行了:

          BufferedInputStream in;

          FileOutputStream out;

          Tidy tidy = new Tidy();

          tidy.setConfigurationFromFile(configFileName);//配置文件,寫入上面的設置參數

          try {

          in = new BufferedInputStream(new FileInputStream(srcFileName));

          out = new FileOutputStream(outFileName);

          tidy.parse(in, out);

          } catch (IOException e) {

          System.out.println(e);

          }

          posted on 2006-03-25 11:15 點滴鑄就輝煌 閱讀(777) 評論(2)  編輯  收藏 所屬分類: 技術點滴
          Comments
          • # re: 用JTidy轉換html為xml
            xiaoyao
            Posted @ 2007-06-07 11:07
            請問中文亂碼問題如何解決,給出代碼號碼?  回復  更多評論   
          • # re: 用JTidy轉換html為xml
            xiaoyao
            Posted @ 2007-06-07 11:07
            給出代碼好嗎?  回復  更多評論   
           
          主站蜘蛛池模板: 怀宁县| 南康市| 内丘县| 轮台县| 浑源县| 榆树市| 双桥区| 潮安县| 桦甸市| 淮滨县| 谢通门县| 台东市| 城口县| 同仁县| 集安市| 利川市| 乐昌市| 千阳县| 防城港市| 华容县| 济阳县| 蓬莱市| 乌拉特后旗| 高台县| 黄大仙区| 德令哈市| 游戏| 师宗县| 无棣县| 乌拉特前旗| 新宁县| 大同县| 竹溪县| 定边县| 林州市| 会泽县| 元谋县| 阿勒泰市| 仪征市| 渝中区| 皋兰县|