我正在使用JTidy v. r938。 我正在使用此代码尝试清理页面...
final Tidy tidy = new Tidy();
tidy.setQuiet(false);
tidy.setShowWarnings(true);
tidy.setShowErrors(0);
tidy.setMakeClean(true);
Document document = tidy.parseDOM(conn.getInputStream(), null);
但是当我解析这个 URL 时 - 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">
而不是使用"标签或显示为"
"。 我通过将生成的 JTidy org.w3c.dom.Document 输出为字符串来确认这一点。我能做些什么来使JTidy真正清理页面 - 即使其格式良好? 我意识到还有其他工具,但这个问题特别与使用 JTIdy 有关。
如果需要 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);
tidy.setXmlTags(true);解析 XML 而不是 HTML
即使发现错误,也使用 Tidy.setForceOutput(true)
(风险自负)生成输出。
我解析 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();