¿Cómo hago que JTIdy haga que los documentos HTML estén bien formados?

Estoy usando JTidy v. R938. Estoy usando este código para intentar limpiar una página …

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

Pero cuando analizo esta URL, http://www.chicagoreader.com/chicago/EventSearch?narrowByDate=This+Week&eventCategory=93922&keywords=&page=1 , las cosas no se están limpiando. Por ejemplo, las tags META en la página, como

  

permanecer como

  

en lugar de tener una etiqueta “” o aparecer como “”. Confirmo esto generando el JTidy org.w3c.dom.Document resultante como una cadena.

¿Qué puedo hacer para que JTidy realmente limpie la página, es decir, para que esté bien formada? Me doy cuenta de que existen otras herramientas, pero esta pregunta se relaciona específicamente con el uso de JTIdy.

Necesitas especificar varias banderas para Tidy si quieres el 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 simplemente si quieres forma XHTML

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

use tidy.setXmlTags (true); para analizar XML en lugar de HTML

Utilice Tidy.setForceOutput(true) (bajo su propio riesgo) para generar el resultado incluso si se encuentran errores.

Analizo el HTML 2 veces para obtener xml bien formado

  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();