Вопрос по html, java, parsing, xml – Как сделать так, чтобы JTIdy делал HTML-документы правильно сформированными?
Я использую JTidy v. R938. Я использую этот код для очистки страницы & # x2026;
<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>
Но когда я анализирую этот URL -http://www.chicagoreader.com/chicago/EventSearch?narrowByDate=This+Week&eventCategory=93922&keywords=&page=1вещи не убираются. Например, теги META на странице, такие как
<code><META http-equiv="Content-Type" content="text/html; charset=UTF-8"> </code>
оставаться как
<code><META http-equiv="Content-Type" content="text/html; charset=UTF-8"> </code>
вместо того, чтобы иметь "/ META" & quot; помечать или отображать как & quot; & lt; META http-equ = & quot; Content-Type & quot; содержание = & Quot; текст / HTML; кодировка = UTF-8 & Quot; / & GT; & Quot ;. Я подтверждаю это, выводя полученный JTidy org.w3c.dom.Document в виде строки.
Что я могу сделать, чтобы JTidy действительно очистил страницу - то есть, чтобы она была правильно оформлена? Я понимаю, что есть и другие инструменты, но этот вопрос конкретно касается использования JTIdy.
Я анализирую 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();
Вам нужно указать несколько флагов для Tidy, если вы хотите формат 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);