在Android上使用JSoup在单独的行中提取相同html标记的文本
我有以下html代码:在Android上使用JSoup在单独的行中提取相同html标记的文本,android,html,kotlin,jsoup,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 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>
输出:
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
-元素不包含新行,这就是为什么如果您打印文本,文本只会附加在末尾
实际上,您正在对
元素使用text()
,这些元素由select
返回。您需要首先将每个条目映射到文本(eachText()
或map{it.text()}
),并将所有返回的条目追加到数据库中,或者直接使用println
打印它们,或者在打印之前在末尾添加首选的新行字符。顺便说一下,您没有提到如何打印文本,但是我认为这对于解决您的问题并不重要。您的元素
对象实际上是一个对象,它有一个方法返回一个列表
,其中包含每个匹配元素的文本
另一方面,该方法返回“所有匹配元素的组合文本”(正如@Roland所说,它没有换行符,这就是为什么所有元素都在一行上)
所以,一般来说,你应该做如下事情:
doc.select("xxx").eachText().forEach(::println)
很抱歉,我没有理解您所说的“在末尾添加首选新行字符”的意思。根据打印方式,您可能需要自己添加新行字符(\n
或\r\n
,或…),由于您的li
-文本不包含任何内容。我将val文本
存储在数据库中,然后从数据库中检索并在文本视图中显示。应该是。forEach(::println)
。只是看到forEach
或map
或eachText
实际上丢失了太晚了:-)好吧。。。在飞行中写它,并把链接放在上面。。。很好;-)
doc.select("xxx").eachText().forEach(::println)