2011-10-27 18 views
1

我正在使用Jsoup尝试清理几乎所有的文档中的html,但白名单范围标记特定类Jsoup可以根据类清理元素吗?

我这有,但很明显,这最终让所有的跨度使用attr类

String html = "<p><strong>Lorem ipsum dolor<br /> sit amet</strong></p>"+ 
"<span class=\"killme\">Aenean</span> quam sem" + 
"<span class=\"whitelistme\">lacinia molestie</span> nibh mattis "; 

String clean = Jsoup.clean(html, 
        Whitelist.none() 
        .addTags("span") 
        .addAttributes("span", "class")); 

有没有办法清理所有HTML除了<跨度类=“whitelistme”>

所以我的最终结果将是

Lorem ipsum dolor sit amet 
Aenean quam sem 
<span class="whitelistme">lacinia molestie</span> nibh mattis 

回答

1

坚持Jsoup解决方案,你可以试试下面的步骤,但它是硬编码:

  1. 从文本中提取所有的价值元素添加到列表。
  2. 将span元素的所有值提取到另一个列表。
  3. 修改带附加标记的文本值,如OMG_value。
  4. 从文本中删除所有html标签。
  5. 迭代并用保存列表中的值替换所有OMG_values。

如果您发现另一个解决方案 - 坚持它。这是来自你残酷的首席执行官的硬编码救星。

+0

感谢D1e,事实上,这将成为诀窍,但正如你所说的,这是硬编码。我期待沿着jQuery选择器的方式,像.clean(“。whitelistme”).. – maverick

+0

你也可以尝试调整一些源代码,如果它是合法的当然。 使用clean()方法作为示例来实现自己的方法,如clean(EnumHtml.Tag ... excludes)。 – JMelnik

+0

是的,它是在公共场合,我可能会试试这个。 bTW,我会给你这个信用。谢谢 – maverick