从java中的String中删除除少数特定的标记之外的Html标记

时间:2011-08-11 10:00:51

标签: java html

我的输入是纯文本字符串,要求删除除少数特定标记之外的所有html标记,如:

<p>
<li>
<u>
<li>

如果这些特定代码包含classid等属性,我想删除这些属性。

一些例子:

<a href = "#">Link</a>            ->   Link

<p>paragraph</p>                  ->   <p>paragraph</p>

<p class="class1">paragraph</p>   ->   <p>paragraph</p>

我已经完成了这个Remove HTML tags from a String,但它没有完全回答我的问题。

它可以由一组正则表达式处理,还是可以使用某些库?

2 个答案:

答案 0 :(得分:12)

我尝试了JSoup,它似乎能够处理所有这些情况。这是示例代码。

 public String clean(String unsafe){
        Whitelist whitelist = Whitelist.none();
        whitelist.addTags(new String[]{"p","br","ul"});

        String safe = Jsoup.clean(unsafe, whitelist);
        return StringEscapeUtils.unescapeXml(safe);
 }

输入字符串

String unsafe = "<p class='p1'>paragraph</p>< this is not html > <a link='#'>Link</a> <![CDATA[<sender>John Smith</sender>]]>";

我得到以下输出,这是我非常需要的。

<p>paragraph</p>< this is not html > Link <sender>John Smith</sender>

答案 1 :(得分:4)

对于简单的HTML,这可能就足够了:

// remove any <script> tags
html = html.replaceAll("(?i)<script.*?</script>", ""));
// this removes any attributes
html = html.replaceAll("(?i)<([a-zA-Z0-9-_]*)(\\s[^>]*)>", "<$1>"));
// this removes any tags (not li and p)
html = html.replaceAll("(?i)<(?!(/?(li|p)))[^>]*>", ""));

希望有所帮助。