7

我正在使用 JTidy v. r938。我正在使用此代码来尝试清理页面……</p>

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">

而不是具有“</META>”标签或显示为“<META http-equiv="Content-Type" content="text/html; 字符集=UTF-8"/>"。我通过将生成的 JTidy org.w3c.dom.Document 作为字符串输出来确认这一点。

我可以做些什么来使 JTidy 真正清理页面——即使其格式正确?我意识到那里还有其他工具,但这个问题特别与使用 JTIdy 有关。

4

4 回答 4

7

如果你想要 XML 格式,你需要为 Tidy 指定几个标志

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);
于 2012-04-30T22:04:42.233 回答
3

使用 tidy.setXmlTags(true); 解析 XML 而不是 HTML

于 2013-02-12T16:22:35.030 回答
2

即使发现错误,也要使用Tidy.setForceOutput(true)(风险自负)生成输出。

于 2013-08-05T21:27:31.330 回答
1

我解析 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();
于 2014-02-06T06:01:25.493 回答