如何在清理文档期间删除空文本元素?

时间:2014-08-20 18:04:54

标签: java html-parsing jsoup

我的代码使用jsoup cleaner从文档中删除不需要的元素。我注意到在清理操作之后,许多空文本节点仍然存在。由于它们没有子节点,因此可以删除它们。

想知道是否有人已经为此实施了解决方案......

文件输出到字符串如下:

            • 文本:
              • text:移动应用
          • 文本:
            • text:金融产品
            • a:another-link
              • text:xyz Visual Data
          • 文本:
        • 文本:
        • 文本:
        • 文本:
        • 文本:
        • 文本:

1 个答案:

答案 0 :(得分:1)

删除空标签可能会很棘手,因为有些标签总是空的(例如<br/><img/>),其他标签即使在空的情况下也会影响文档的布局(例如<p></p> )。更糟糕的是,某些CSS配置可能会导致几乎任何类型的标签影响文档布局(例如字体图标)。

如果您可以决定愿意删除哪些元素,则以下内容应该有效:

// Names of the elements to remove if empty
Set<String> removable = ....

// Parse the html into a jsoup document
Document source = Jsoup.parse(myHtml);

// Clean the html according to a whitelist
Document cleaned = new Cleaner(whitelist).clean(source);

// For each element in the cleaned document
for(Element el: cleaned.getAllElements()) {

   if(el.children().isEmpty() && !el.hasText()) {
       // Element is empty, check if should be removed
       if(removable.contains(el.tagName())) el.remove();
   }
}