Pregunta sobre jtidy, xml, parsing, html, java – ¿Cómo hago que JTIdy haga que los documentos HTML estén bien formados?

6

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

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

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 etiquetas META en la página, como

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

permanecer como

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

en lugar de tener una etiqueta "</META>" o aparecer como "<META http-equiv =" Content-Type "content =" text / html; conjunto de caracteres = UTF-8 "/>". 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.

¿Alguna vez has encontrado una solución a esto? Drazen Bjelovuk

Tu respuesta

3   la respuesta
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");
}

O simplemente si quieres forma XHTML

Tidy tidy = new Tidy();
tidy.setXHTML(true);
Intenté esto con "setXmlOut" y "setXHTML" pero ninguno generó un documento bien formado devuelto por "document = tidy.parseDOM (...)". Además, JTidy está escupiendo el mensaje: "Este documento tiene errores que deben corregirse antes de usar HTML Tidy para generar una versión ordenada". Dave
2

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

1

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

Preguntas relacionadas