2012-04-30 22 views
6

我正在使用JTidy v。r938。我使用此代碼試圖清理網頁...如何讓JTIdy使HTML文檔格式正確?

final Tidy tidy = new Tidy(); 
tidy.setQuiet(false); 
tidy.setShowWarnings(true); 
tidy.setShowErrors(0); 
tidy.setMakeClean(true); 
Document document = tidy.parseDOM(conn.getInputStream(), null); 

但是,當我分析這個網址 - http://www.chicagoreader.com/chicago/EventSearch?narrowByDate=This+Week&eventCategory=93922&keywords=&page=1,事情沒有得到清理。例如,在網頁上的META標籤,像

<META http-equiv="Content-Type" content="text/html; charset=UTF-8"> 

保持作爲

<META http-equiv="Content-Type" content="text/html; charset=UTF-8"> 

代替具有 「</META >」 標記或顯示爲 「< META HTTP-當量=」 內容-Type「content =」text/html; charset = UTF-8「/ >」。我通過輸出生成的JTidy org.w3c.dom.Document作爲字符串來確認。

我能做些什麼來使JTidy真正地清理頁面 - 即使它格式良好?我意識到還有其他工具,但這個問題具體涉及到使用JTIdy。

+1

曾找到解決這個? –

回答

4

你需要,如果你想XML格式

private String cleanData(String data) throws UnsupportedEncodingException { 
    Tidy tidy = new Tidy(); 
    tidy.setInputEncoding("UTF-8"); 
    tidy.setOutputEncoding("UTF-8"); 
    tidy.setWraplen(Integer.MAX_VALUE); 
    tidy.setPrintBodyOnly(true); 
    tidy.setXmlOut(true); 
    tidy.setSmartIndent(true); 
    ByteArrayInputStream inputStream = new ByteArrayInputStream(data.getBytes("UTF-8")); 
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
    tidy.parseDOM(inputStream, outputStream); 
    return outputStream.toString("UTF-8"); 
} 

或者乾脆如果想XHTML形式

Tidy tidy = new Tidy(); 
tidy.setXHTML(true); 
+3

我試着用「setXmlOut」和「setXHTML」,但都沒有生成由「document = tidy.parseDOM(...)」返回的格式良好的文檔。此外,JTidy正在吐出消息:「此文檔有錯誤,必須在使用HTML Tidy生成整理版本之前修復 」。 – Dave

3

使用tidy.setXmlTags(真)指定若干旗整齊;解析XML而不是HTML

+0

它用於我的一個HTML解析問題與整潔..謝謝:) – CFUser

2

使用Tidy.setForceOutput(true)(風險自負)即使發現錯誤也會生成輸出。

1

我解析HTML 2次獲得良好的XML

BufferedReader br = new BufferedReader(new StringReader(str)); 
    StringWriter sw = new StringWriter(); 

    Tidy t = new Tidy(); 
    t.setDropEmptyParas(true); 
    t.setShowWarnings(false); //to hide errors 
    t.setQuiet(true); //to hide warning 
    t.setUpperCaseAttrs(false); 
    t.setUpperCaseTags(false); 
    t.parse(br,sw); 
    StringBuffer sb = sw.getBuffer(); 
    String strClean = sb.toString(); 
    br.close(); 
    sw.close(); 

    //do another round of tidyness 
    br = new BufferedReader(new StringReader(strClean)); 
    sw = new StringWriter(); 

    t = new Tidy(); 
    t.setXmlTags(true); 
    t.parse(br,sw); 
    sb = sw.getBuffer(); 
    String strClean2 = sb.toString(); 
    br.close(); 
    sw.close();