2012-04-30 13 views
6

Sto usando JTidy v. R938. Sto usando questo codice per tentare di ripulire una pagina ...In che modo JTIdy rende i documenti HTML ben formati?

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

Ma quando sono parse questo URL - http://www.chicagoreader.com/chicago/EventSearch?narrowByDate=This+Week&eventCategory=93922&keywords=&page=1, le cose non sono sempre pulita. Ad esempio, i META tag sulla pagina, come

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

rimangono come

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

invece di avere un tag "</META >" o che appare come "< META http-equiv =" Content -Tipo "content =" text/html; charset = UTF-8 "/ >". Lo confermo emettendo JTidy org.w3c.dom.Document come stringa.

Cosa posso fare per fare in modo che JTidy pulisca veramente la pagina, cioè la forma bene? Mi rendo conto che ci sono altri strumenti là fuori, ma questa domanda riguarda specificamente l'uso di JTIdy.

+1

mai trovare una soluzione a questo? –

risposta

4

È necessario specificare diverse bandiere per riordinare se si desidera formato 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"); 
} 

o semplicemente se volete forma XHTML

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

Ho provato questo con entrambi "setXmlOut" e "setXHTML", ma nessuno dei due ha generato un documento ben formato restituito da "document = tidy.parseDOM (...)". Inoltre, JTidy sta sputando fuori il messaggio, "Questo documento ha errori che devono essere risolti prima dello usando HTML Tidy per generare una versione ripulita." – Dave

3

uso tidy.setXmlTags (true); per analizzare XML anziché HTML

+0

Ha funzionato per uno dei miei problemi di analisi HTML con ordine .. Grazie :) – CFUser

2

Utilizzare Tidy.setForceOutput(true) (a proprio rischio e pericolo) per generare l'output anche se vengono rilevati errori.

1

ho analizzare il codice HTML 2 volte per ottenere ben formati 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(); 
Problemi correlati