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