Анализ содержимого HTML с помощью одноуровневых тегов в Java (или) Поиск содержимого между двумя тегами <open> - PullRequest
0 голосов
/ 29 августа 2011

Справочная информация: я пишу Java-программу для просмотра HTML-файлов и замены всего содержимого в тегах, которые не <script> или <style>, на Lorem Ipsum. Первоначально я делал это с помощью регулярного выражения, просто удаляя все между a> и <, что на самом деле работало довольно хорошо (я знаю, кощунственно), но я пытаюсь превратить это в инструмент, который другие могут найти полезным, чтобы я не посмел угрожать святости вселенной больше, пытаясь использовать регулярные выражения в html. </p>

Я пытаюсь использовать HtmlCleaner, библиотеку Java, которая привлекла меня, потому что у нее нет других зависимостей. Однако, пытаясь реализовать его, я не смог разобраться с html следующим образом:

<div>
    This text is in the div <span>but this is also in a span.</span>
</div>

Проблема проста. Когда TagNodeVisitor достигает div, если я заменю его содержимое нужным количеством губ, он удалит тег span. Но если я разверну только тэги TagNode без других детей, я бы пропустил первый фрагмент текста.

HtmlCleaner имеет объект ContentNode, но у этого объекта нет метода замены. Все, что я могу придумать, чтобы справиться с этим, кажется слишком сложным. Кто-нибудь знает способ справиться с этим, с HtmlCleaner или какой-либо другой библиотекой синтаксического анализа, с которой вы более знакомы?

Ответы [ 2 ]

0 голосов
/ 06 сентября 2011

HNTMLCleaner ContentNode имеет метод getContent () , который возвращает java.lang.StringBuilder .Это изменчиво и может быть изменено на любое значение, которое вы хотите.

0 голосов
/ 29 августа 2011

Вы можете делать все, что захотите, с помощью JSoup setters

Подойдет ли вам это?

 Element div = doc.select("div").first(); // <div></div>
 div.html("<p>lorem ipsum</p>"); // <div><p>lorem ipsum</p></div>
...