【问题标题】:Extract the text of same html tags in separate lines with JSoup on Android在Android上使用JSoup在不同的行中提取相同html标签的文本
【发布时间】:2018-07-30 16:39:52
【问题描述】:

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

你们知道这怎么可能吗?

【问题讨论】:

    标签: android html kotlin jsoup


    【解决方案1】:

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

    另一方面,text() 方法返回“所有匹配元素的组合文本”(正如@Roland 所说,它没有换行符,这就是为什么你会在 1 行上获得所有元素)。

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

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

    【讨论】:

    • 应该是.forEach(::println)。只是发现forEachmapeachText 实际上已经丢失了:-)
    • 好吧...即时编写它将链接放在上面...足够好;-)
    【解决方案2】:

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

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

    【讨论】:

    • 抱歉,我没有理解您所说的“在末尾添加您喜欢的换行符”的意思
    • 根据您的打印方式,您可能需要自己添加一个换行符(\n\r\n,或...),因为您的li-text 不包含任何。
    • 我将val text 存储在数据库中,然后从数据库中检索它并在文本视图中显示它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多