Я пытаюсь использовать JTidy (jtidy-r938.jar) для очистки входа строка HTML, но у меня, кажется, есть проблемы при разбирании в настройках по умолчанию. Часто строки такой как "привет мир" заканчиваются как "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;"> </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>
Так,
"общедоступная Строка parseDescription" становится "publicString parseDescription"
Заранее спасибо!
Что ж, похоже, это ошибка в Jtidy. Точный файл, вызывающий проблемы, можно найти здесь:
http://sourceforge.net/tracker/?func=detail&aid=2985849&group_id=13153&atid=113153
Спасибо за помощь, ребята!
Вот как мы вызываем 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>
Посмотрите, как настроен JTidy:
StringWriter writer = new StringWriter();
tidy.getConfiguration().printConfigOptions(writer, true);
System.out.println(writer.toString());
Возможно, тогда станет ясно, в чем причина проблемы.
Что странно? Маленький пример, фактического вывода и ожидаемого... может быть?