如何使用 Jsoup 从 html 元素中删除所有内联样式和其他属性?

Posted

技术标签:

【中文标题】如何使用 Jsoup 从 html 元素中删除所有内联样式和其他属性?【英文标题】:How to remove all inline styles and other attributes from html elements using Jsoup? 【发布时间】:2013-11-16 00:51:08 【问题描述】:

如何使用 Jsoup 从 html 元素中删除所有内联样式和其他属性(类、onclick)?

示例输入:

<div style="padding-top:25px;" onclick="javascript:alert('hi');">
This is a sample div <span class='sampleclass'> This is a sample span </span>
</div>

样本输出:

<div>This is a sample div <span> This is a sample span </span> </div>

我的代码(这是正确的方法还是有其他更好的方法?)

Document doc = Jsoup.parse(html);
Elements el = doc.getAllElements();
for (Element e : el) 
    Attributes at = e.attributes();
    for (Attribute a : at)     
        e.removeAttr(a.getKey());    
    

【问题讨论】:

@T.J.Crowder 感谢您的回复。请参阅我更新的问题。这是正确的方法还是有其他更好的方法?? @vjy 更新后的代码对您有用吗?还是不工作? @ashatte 我找到了工作代码并在问题中进行了更新。我想知道我在做什么是正确的或任何其他更好的 api,而不是遍历所有元素以清除属性?? 【参考方案1】:

是的,确实有一种方法是遍历元素并调用removeAttr();

使用 jsoup 的另一种方法是使用 Whitelist 类(请参阅 docs),该类可与 Jsoup.clean() 函数一起使用以从文档中删除任何未指定的标签或属性。

例如:

String html = "<html><head></head><body><div style='padding-top:25px;' onclick='javascript.alert('hi');'>This is a sample div <span class='sampleclass'>This is a simple span</span></div></body></html>";

Whitelist wl = Whitelist.simpleText();
wl.addTags("div", "span"); // add additional tags here as necessary
String clean = Jsoup.clean(html, wl);
System.out.println(clean);

将产生以下输出:

11-05 19:56:39.302: I/System.out(414): <div>
11-05 19:56:39.302: I/System.out(414):  This is a sample div 
11-05 19:56:39.302: I/System.out(414):  <span>This is a simple span</span>
11-05 19:56:39.302: I/System.out(414): </div>

【讨论】:

谢谢你..这就是我需要的:-) 没问题,很高兴为您提供帮助:)

以上是关于如何使用 Jsoup 从 html 元素中删除所有内联样式和其他属性?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jsoup 选择一个没有类的 HTML 元素

Jsoup:在无 CSS 的 HTML 中提取两个块之间的所有 HTML

Jsoup 删除嵌套标签但保留文本

如何使用 Jsoup 添加新的 html 标签?

Jsoup

从所有 HTML 文件中查找并删除第一个子元素