Pytanie w sprawie java, parsing, html, jtidy, xml – Jak sprawić, by JTIdy sprawiło, że dokumenty HTML będą dobrze uformowane?

6

Używam JTidy v. R938. Używam tego kodu do próby wyczyszczenia strony…

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

Ale kiedy analizuję ten adres URL -http://www.chicagoreader.com/chicago/EventSearch?narrowByDate=To+Week&eventCategory=93922&keywords=&page=1, rzeczy nie są sprzątane. Na przykład znaczniki META na stronie, jak

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

pozostać jako

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

zamiast mieć tag „</META>” lub pojawiać się jako „<META http-equiv =” Content-Type „content =” text / html; charset = UTF-8 "/>". Potwierdzam to, wysyłając wynikowy plik JTidy org.w3c.dom.Document jako łańcuch.

Co mogę zrobić, aby JTidy naprawdę oczyściło stronę - tzn. Sprawiło, że była dobrze uformowana? Zdaję sobie sprawę, że istnieją inne narzędzia, ale to pytanie dotyczy w szczególności korzystania z JTIdy.

Czy kiedykolwiek znalazłeś rozwiązanie tego problemu? Drazen Bjelovuk

Twoja odpowiedź

3   odpowiedź
2

Tidy.setForceOutput(true) (na własne ryzyko), aby wygenerować dane wyjściowe, nawet jeśli zostaną znalezione błędy.

1

aby uzyskać dobrze sformatowany plik 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();
4

jeśli chcesz format 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");
}

Lub po prostu, jeśli chcesz mieć formularz XHTML

Tidy tidy = new Tidy();
tidy.setXHTML(true);
Próbowałem tego zarówno z „setXmlOut”, jak i „setXHTML”, ale nie wygenerowałem dobrze sformatowanego dokumentu zwróconego przez „document = tidy.parseDOM (...)”. Ponadto JTidy wypluwa komunikat „Ten dokument zawiera błędy, które należy naprawić przed użyciem HTML Tidy do wygenerowania wersji uporządkowanej”. Dave

Powiązane pytania