2014-06-15 20 views
0

我需要从HTMl片段中提取所有文本。Jsoup:提取文本为人类会读取它

例子:

INPUT<p><div>how are</div> you doing?</p><p>I'm doing well</p>

输出how are you doing? I'm doing well

我发现的问题,比如这一个Text Extraction from HTML Java,即处理类似的问题,但他们都只是删除<p>标签,但不要删除内部元素。

最初,我试着通过每个<p>标签的孩子列出并且连接它们的内容,并递归地检查每个孙子并连接它的孩子等,直到只有文本。问题在于一些文本没有被标签包围,而且很简单。

我也试过Jsoup.parse(html).select("p").text(),但是我得到"[]I'm doing well"作为输出。

这似乎是网络爬虫类型程序非常普遍的需求,但我找不到解决方案。

+0

这是HTML的滥用的东西。子元素意味着相关但是独立的内容。因此,你为什么要努力寻找类似的解决方案。你需要实现的是一个递归解决方案,以确保当前元素的所有子元素在进入下一个元素之前都被解析。 – christopher

+0

@christopher Ohhhh ...偶然,当我写单元测试(我后来复制到这个问题)时,我输入'div'而不是'span'。如果我用'span'标记替换它,它现在可以工作。抱歉浪费每个人的时间。 –

回答

2

试试这个:

Document doc = Jsoup.parse("<p><div>how are</div> you doing?</p><p>I'm doing well</p>"); 
String body = doc.body().text(); 
+0

'doc.body()。text()'只在编译文本时删除'span'标签,但不使用div标签。 –

+0

这是一个非常好的解决方案。来自我的+1! – christopher