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

Extract the text of same html tags in separate lines with JSoup on Android

我有这个 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

你们知道这怎么可能吗?

您的 li- 元素不包含换行符,这就是为什么如果您打印文本,文本只会附加在末尾。

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

您的 element 对象实际上是一个 Elements object, which has a eachText() 方法,返回一个 List 包含每个匹配元素的文本。

另一方面,text() 方法 returns "the combined text of all the matched elements" (正如@Roland 所说,它没有换行符,这就是为什么你将所有元素都放在一行上的原因)。

所以,一般来说,您应该这样做:

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