удалить пустые пары тегов из фрагмента HTML - PullRequest
7 голосов
/ 03 января 2012

У меня есть пользовательская строка, содержащая содержимое HTML, например

"<p></p><div></div><p>Hello<br/>world</p><p></p>"

. Я хочу преобразовать эту строку так, чтобы пустые пары тегов были удалены (но пустые теги, такие как <br/>, сохраняются),Например, результат этого преобразования должен преобразовать приведенную выше строку в

"<p>Hello<br/>world</p>"

Я хотел бы использовать JSoup для этого, так как у меня уже есть это на моем classpath, и это будетмне проще всего выполнить это преобразование на стороне сервера.

Ответы [ 5 ]

23 голосов
/ 10 января 2012

Вот пример, который делает именно это (используя JSoup):

String html = "<p></p><div></div><p>Hello<br/>world</p><p></p>";
Document doc = Jsoup.parse(html);

for (Element element : doc.select("*")) {
    if (!element.hasText() && element.isBlock()) {
        element.remove();
    }
}

System.out.println(doc.body().html())

Вывод кода выше - то, что вы ищете:

<p>Hello<br />world</p>
8 голосов
/ 03 января 2012

Не очень знаком с jsoup, но вы можете сделать это с помощью простого замены регулярного выражения:

String html = "<p></p><div></div><p>Hello<br/>world</p><p></p>";
html = html.replaceAll("<([^>]*)></\\1>", "");

Хотя с полным синтаксическим анализатором вы, вероятно, могли бы просто отбрасывать пустой контент во время обработки, в зависимости от того, что вы в конечном итоге собираетесь с ним делать.

1 голос
/ 09 января 2012

Jsoup сделает правильный XML из введенного пользователем HTML.Используйте синтаксический анализатор XML, чтобы найти и удалить все пустые теги.Я думаю, что это лучшая идея, чем регулярное выражение.Смотрите здесь: Java Удалить пустые теги XML Вы также можете использовать JSoup, чтобы найти пустые теги для вас.Смотрите здесь: http://jsoup.org/cookbook/extracting-data/selector-syntax и используйте метод Node.remove ().

0 голосов
/ 06 января 2012

не знаю Jsoup, приведенный ниже код также работает с простым регулярным выражением javascript. попробуйте следующий код.

function removeall(){
var tagarray=new Array("<p>","<div>");
source="<p></p><div></div><p>Hello<br/>world</p><p></p>";
for ( var int = 0; int < tagarray.length; int++) {
tag2=tagarray[int].replace("<","</");
var tagpair=new RegExp(tagarray[int]+tag2,"g");
source=source.replace(tagpair,"");
    }
alert(source);

}

0 голосов
/ 03 января 2012

если вы используете jquery, вы можете сделать это как

var tags = "<p></p><div></div><p>Hello<br/>world</p><p></p>";

$("<div id='mydiv'>"+tags+"</div>").appendTo($('body'));
$('#mydiv').children().each(function(){
    var elem = $(this);
    if(elem.html() === "") elem.remove();
});

fiddle: http://jsfiddle.net/LqCx5/2/

...