在Android上使用JSoup在单独的行中提取相同html标签的文本

时间:2018-07-30 07:02:50

标签: android html kotlin jsoup

我有这个html代码:

<li itemprop="something">Text 1</li><li itemprop="something">Text 2</li><li itemprop="something">Text 3</li><li itemprop="something">Text 4</li><li itemprop="something">Text 5 </li><li itemprop="something">Text 6 </li>

当我使用以下代码提取文本时,它使我连续。

val doc = Jsoup.parse(html)
val element = doc.select("li[itemprop=something]")
val text = element.text()

输出:

Text 1 Text 2 Text 3 Text 4 Text 5 Text 6

但我希望它们分开显示:

Text 1
Text 2
Text 3
Text 4
Text 5
Text 6

你们知道这怎么可能吗?

2 个答案:

答案 0 :(得分:1)

您的element对象实际上是一个Elements对象,它具有一个eachText()方法,该方法返回一个List,其中包含每个匹配元素的文本。

另一方面,text()方法返回“所有匹配元素的组合文本”(如@Roland所说,没有换行符,这就是为什么将所有元素都放在一行上的原因。) / p>

因此,通常,您应该执行以下操作:

doc.select("xxx").eachText().forEach(::println)

答案 1 :(得分:0)

您的li元素不包含换行符,这就是为什么在打印时仅在文本末尾附加内容。

您实际上是在text()返回的Elements上使用select。您要么需要先将每个条目映射到文本(eachText()map { it.text() }),然后将所有返回的条目附加到数据库中,要么直接使用println打印它们,或者在以下位置添加您喜欢的换行符最后打印之前。顺便说一句,您没有提到如何打印文本,但是,我认为这对解决您的问题并不重要。