如何从JSoup“文档”中删除不间断空格?

7
我该如何移除这些内容:
<td>&nbsp;</td>

或者

<td width="7%">&nbsp;</td>

我该如何从我的JSoup 'Document'中获取内容?我尝试了很多方法,但这些不间断空格字符与普通的JSoup表达式或选择器不匹配。


1
难道不能在IDE或文本编辑器(如Notepad ++)中打开文档,然后进行查找和替换吗?还是你的意思是需要以编程方式实现? - tw16
这适用于整个文档还是仅限于<td>元素内部?顺便说一下,您是否知道MSIE浏览器在完全空的<td>元素上呈现存在问题? <td>&nbsp;</td>是解决此MSIE不良行为的经典解决方法。 - BalusC
在Jsoup之前,您是否尝试过像response.replaceAll("&nbsp", "")这样的东西? - tw16
@tw16 我想要删除整行,而不仅仅是  。此外,我正在使用 JSoup.connect("http://www.blah.com").get(),它不允许您在解析之前修改文档。 - Nick Betcher
“整行”这个词太模糊了。HTML没有“行”的概念。因此,您应该通过BufferedReaderURL#openStream()输入,然后在其中包含“ ”时忽略readLine() - BalusC
显示剩余3条评论
1个回答

15

HTML实体&nbsp;Unicode字符NO-BREAK SPACE U+00A0)在Java中可以用字符\u00a0表示。假设您想删除每个包含该字符作为自己文本的元素(因此不是每个,正如您在评论中所说),则以下内容应该有效:

document.select(":containsOwn(\u00a0)").remove();

如果你真的想要移除整个,那么最好的方法就是逐行扫描 HTML。


document.select(":containsOwn(\u00a0)").remove(); 这会删除所有带有空格的元素, 但我只想删除任何带有   的标签。 https://jsoup.org/apidocs/org/jsoup/select/Selector.html#:~:text=p%3AcontainsOwn(jsoup)%20finds,搜索不区分大小写。 然后我尝试了这个 :containsWholeOwnText(" ") 但是它抛出错误 containsWholeOwnText(\ u00a0)处的意外令牌。 我不确定问题出在哪里。 - asifaftab87
错误。它正在删除所有具有非断行空格的元素,即由HTML实体&nbsp;表示的确切字符\u00a0。这已经在答案中解释过了。如果对您不起作用,那么我猜您的实际问题是不同的。也许您是想说您在Web浏览器本身呈现的文本中字面上看到了&nbsp;?换句话说,HTML源代码包含实际上&amp;nbsp;而不是&nbsp; - BalusC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接