JSoup的替代方案或如何清理空格

时间:2012-10-25 14:50:05

标签: java html jsoup

有人知道 JSoup 的替代方法吗?

或者如何清除<p>&nbsp;</p>等序列?

适用于jQuery的HTML Clean插件对我很有用,但我有兴趣在服务器端进行html代码清理,而不是客户端

或者,要做的replaceAll表达式是什么?:

String cleanS = dirtyS.replaceAll("<p>&nbsp;</p>", ""); //This doesnt work

我发现脏HTML带有混合序列的空格#160 ,其他像#32

所以,我需要的是一个表达式来删除它们的任何混合物。

mix space blank

2 个答案:

答案 0 :(得分:7)

您可以为此更改OutputSettings

示例:

final String html = ...;


OutputSettings settings = new OutputSettings();
settings.escapeMode(Entities.EscapeMode.xhtml);

String cleanHtml = Jsoup.clean(html, "", Whitelist.relaxed(), settings);

这也可以通过Jsoup解析的Document来实现:

Document doc = Jsoup.parse(...);
doc.outputSettings().escapeMode(Entities.EscapeMode.xhtml);

// ...

修改

删除标签:

doc.select("p:matchesOwn((?is) )").remove();

请注意:在(?is)之后为空白,但字符#160 (= nbsp)。 这将删除所有自己的文本仅为&nbsp;的p-Tags。如果您希望对所有其他代码执行此操作,则可以将p:替换为*:

答案 1 :(得分:1)

如果您有文档对象,则可以遍历paragrap元素并删除其中没有文本(或非空白文本)的所有元素。在检查文本是否为空之前,可以替换NBSP的出现;与白色空间。假设您使用UTF-8文件,以下内容可能对您有用:

public static final String NBSP_IN_UTF8 = "\u00a0"; 

假设您知道如何获取Document对象,那么要清理的循环很简单:选择段落元素并删除空元素:

org.jsoup.nodes.Document doc= ...   //obtain your document object  
for (org.jsoup.nodes.Element element : doc.select("p")) {
    if ( !element.hasText() || element.text().replaceAll(NBSP_IN_UTF8, "").trim().equals("") ) {
       element.remove();
    }
  }