java - Jsoup удаление аттрибута


0

Я хочу удалить из html-документа из тега embed аттрибут style:

<div>
    <embed class="style_5" id="__bookmark_3" onresize="document.getElementById(__bookmark_3).reload()" type="image/svg+xml" src="image/custom10.svg" alt="" style=" width: 212pt; height: 285.75pt;display: block;"></embed>
</div>

Для этого я использую библиотеку jsoup и следующий код:

File generatedReport = new File(outputReportPath);
if (generatedReport.exists()) {
    logger.info("generatedReport exists");
} else {
    logger.info("generatedReport doesnt exist");
}
Document doc = Jsoup.parse(generatedReport, "UTF-8");
Element embed = doc.select("embed").first();
String styleAttr = embed.attr("style");
logger.info("styleAttr: " + styleAttr);
embed.removeAttr("style");

И после запуска в логах такой вывод:

...|INFO | generatedReport exists

...|INFO | styleAttr: width: 212pt; height: 285.75pt;display: block;

Т.е. вроде как всё отрабатывает хорошо, кроме того, что тег из html-файла не удаляется. Что я делаю неверно? Или данный метод только удаляет аттрибут из объектной модели в памяти программы, и нужно перезаписать файл, чтобы фактически удалить аттрибут из тега hmtl-файла?

Источник
  •  39
  •  1
  • 12 янв 2018 2018-01-12 11:28:53

1 ответ

1

Да, как я и предполагала, данный метод только удаляет аттрибут из объектной модели в памяти программы, и нужно перезаписать файл, чтобы фактически удалить аттрибут из тега hmtl-файла. После добавления данного кода:

PrintWriter writer = new PrintWriter(generatedReport,"UTF-8");
writer.write(doc.html());
writer.flush();
writer.close();

html-файл был изменён, и тег embed стал выглядеть

<embed class="style_5" id="__bookmark_3" onresize="document.getElementById(__bookmark_3).reload()" type="image/svg+xml" src="image/custom10.svg" alt=""> 

что и требовалось.

  • 12 янв 2018 2018-01-12 11:39:36