jhengfei
          愛JAVA,愛生活

          最近要從網(wǎng)頁中提取信息,想先把html轉(zhuǎn)換成標(biāo)準(zhǔn)的xml格式,然后方便使用dom4j進行后續(xù)的分析,試用了不少現(xiàn)成的類庫,JTidy、NekoHTML、HTML Parser、Jericho,最后還是使用了JTidy。

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

          JTidy提供了一個語法檢查器和標(biāo)簽補償器,能夠?qū)Ω鞣N亂七八糟的html進行修復(fù),使之符合xhtml標(biāo)準(zhǔn)。

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

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

          一些常用的參數(shù)設(shè)置:

          setAltText(java.lang.String altText)?
          加上默認(rèn)的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)?
          結(jié)果中不生成注釋
          setInputEncoding(java.lang.String encoding)
          輸入編碼
          setLogicalEmphasis(boolean logicalEmphasis)
          用em替代i,strong替代b
          setMessageListener(TidyMessageListener listener)
          加入一個TidyMessageListener監(jiān)聽器
          setOnlyErrors(boolean onlyErrors)?
          只輸出錯誤文件
          setOutputEncoding(java.lang.String encoding)?
          輸出編碼
          setPrintBodyOnly(boolean bodyOnly)?
          只輸出body中的部分
          setRepeatedAttributes(int repeatedAttributes)?
          重復(fù)屬性的處理
          setSpaces(int spaces)?
          每行前的空格數(shù),就是縮進格式
          setTidyMark(boolean tidyMark)?
          是否生成tidy標(biāo)記
          setTrimEmptyElements(boolean trimEmpty)?
          不輸出空元素
          setUpperCaseAttrs(boolean upperCaseAttrs)?
          屬性變大寫
          setUpperCaseTags(boolean upperCaseTags)?
          標(biāo)記變大寫
          setWraplen(int wraplen)?
          多長換行
          setXHTML(boolean xhtml)?
          輸出xhtml
          setXmlOut(boolean xmlOut)
          輸出xml
          setXmlPi(boolean xmlPi)?
          文件頭輸出xml標(biāo)記
          setXmlSpace(boolean xmlSpace)
          加入xml名字空間屬性

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

          BufferedInputStream in;

          FileOutputStream out;

          Tidy tidy = new Tidy();

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

          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)  編輯  收藏 所屬分類: 技術(shù)點滴
          Comments
           
          主站蜘蛛池模板: 会泽县| 大理市| 来凤县| 秦安县| 中卫市| 寿光市| 萝北县| 射洪县| 郓城县| 绵竹市| 灵台县| 静海县| 辰溪县| 宽城| 额尔古纳市| 贵港市| 永登县| 陆良县| 历史| 清涧县| 中江县| 高唐县| 黎城县| 百色市| 利津县| 酒泉市| 竹溪县| 曲阳县| 平昌县| 沁源县| 溆浦县| 石家庄市| 高雄县| 吴川市| 农安县| 灵武市| 民县| 六盘水市| 阿图什市| 集安市| 瑞安市|