有人知道 JSoup 的替代方法吗?
或者如何清除<p> </p>
等序列?
适用于jQuery的HTML Clean插件对我很有用,但我有兴趣在服务器端进行html代码清理,而不是客户端。
或者,要做的replaceAll表达式是什么?:
String cleanS = dirtyS.replaceAll("<p> </p>", ""); //This doesnt work
我发现脏HTML带有混合序列的空格#160 ,其他像#32 。
所以,我需要的是一个表达式来删除它们的任何混合物。
答案 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)。
这将删除所有自己的文本仅为
的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();
}
}