Правильное использование JTidy для очистки HTML - PullRequest
5 голосов
/ 30 марта 2010

Я пытаюсь использовать JTidy (jtidy-r938.jar) для очистки входной строки HTML, но у меня, похоже, возникают проблемы с настройкой параметров по умолчанию. Часто такие строки, как «hello world», заканчиваются как «helloworld» после уборки. Я хотел показать, что я здесь делаю, и любые указатели были бы очень благодарны:

Предположим, что rawHtml - это строка, содержащая входной (реальный мир) HTML. Вот что я делаю:

        Tidy tidy = new Tidy();
        tidy.setPrintBodyOnly(true);

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        PrintStream ps = new PrintStream(baos);

        tidy.parse(new StringReader(rawHtml), ps);
        return baos.toString("UTF8");   

Прежде всего, что-то выглядит в корне неправильно с приведенным выше кодом? Я, кажется, получаю странные результаты с этим.

Например, рассмотрим следующий ввод:

<p class="MsoNormal" style="text-autospace:none;"><font color="black"><span style="color:black;">???</span></font><b><font color="#7f0055"><span style="color:#7f0055;font-weight:bold;">private</span></font></b><font color="black"><span style="color:black;"> String parseDescription</span></font><font>

Вывод:

<p class="MsoNormal" style="text-autospace:none;"><font color= "black"><span style="color:black;">&nbsp;&nbsp;&nbsp;</span></font> <b><font color="#7F0055"><span style= "color:#7f0055;font-weight:bold;">private</span></font></b><font color="black"><span style="color:black;">String parseDescription</span></font></p>

Итак,

«public String parseDescription» становится «publicString parseDescription»

Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 09 апреля 2010

Посмотрите, как настроен JTidy:

StringWriter writer = new StringWriter();
tidy.getConfiguration().printConfigOptions(writer, true);
System.out.println(writer.toString());

Может быть, тогда станет ясно, в чем причина проблемы.

Что странного? Небольшой пример, фактического производства и ожидаемого ... может быть?

2 голосов
/ 12 апреля 2010

Ну, это похоже на ошибку в Jtidy. Точный файл, который вызывает проблемы, смотрите здесь:

http://sourceforge.net/tracker/?func=detail&aid=2985849&group_id=13153&atid=113153

Спасибо за помощь, люди!

1 голос
/ 31 марта 2010

Вот как мы называем JTidy из Ant. Из этого вы можете сделать вывод вызова API:

<tidy destdir="${build.dir.result}">
  <fileset dir="${src}" includes="**/*.htm"/>
  <parameter name="tidy-mark" value="false"/>
  <parameter name="output-xml" value="no"/>
  <parameter name="numeric-entities" value="yes"/>
  <parameter name="indent-spaces" value="2"/>
  <parameter name="indent-attributes" value="no"/>
  <parameter name="markup" value="yes"/>
  <parameter name="wrap" value="2000"/>
  <parameter name="uppercase-tags" value="no"/>
  <parameter name="uppercase-attributes" value="no"/>
  <parameter name="quiet" value="no"/>
  <parameter name="clean" value="yes"/>
  <parameter name="show-warnings" value="yes"/>
  <parameter name="break-before-br" value="yes"/>
  <parameter name="hide-comments" value="yes"/>
  <parameter name="char-encoding" value="latin1"/>
  <parameter name="output-html" value="yes"/>
</tidy>
...