7

JTidyv。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;」と表示したりする代わりに charset =UTF-8"/>"。結果のJTidyorg.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); を使用します。HTML の代わりに XML を解析する

于 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 に答える