Вопрос по html, java, parsing, xml – Как сделать так, чтобы JTIdy делал HTML-документы правильно сформированными?

6

Я использую 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.

Когда-нибудь находили решение для этого? Drazen Bjelovuk

Ваш Ответ

4   ответа
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();
2

использованиеTidy.setForceOutput(true) (на свой страх и риск), чтобы генерировать вывод, даже если обнаружены ошибки.

4

Вам нужно указать несколько флагов для 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);
Я пробовал это с обоими & quot; setXmlOut & quot; и "setXHTML" но ни один из них не сгенерировал правильно оформленный документ, возвращенный & quot; document = tidy.parseDOM (...) & quot ;. Кроме того, JTidy выплевывает сообщение: «В этом документе есть ошибки, которые необходимо исправить перед использованием HTML Tidy для создания исправленной версии». Dave
3

использовать tidy.setXmlTags (true); разобрать XML вместо HTML

Это сработало для одной из моих проблем с разбором HTML с tidy .. Спасибо :)

Похожие вопросы