Jsoup未封闭标签问题

问题描述

我有这个html,我想解析它

下面的代码

<div class="info">
<strong>uno</strong>
<p>gang . boni</p>
<p>4.1 ★ <span>18+</span></p>
</div>

这是我的代码

val ce= doc2.select("div [class='columns is-multiline'] p:eq(2)")

println(ce)

及其输出是这个

<p>4.1 ★ <span>18+</span></p>

但是我希望输出仅为4.1怎么做?我试图先做,但它给 同样的事情。

编辑:

 val ComboImageUrls: Elements = doc2.select("div [class='columns is-multiline'] img[src]")
    val p = doc2.select("div [class='columns is-multiline'] p:eq(2)").first()



    val ce: String = (p.childNode(0) as TextNode).text()

    ComboImageUrls.forEachIndexed { index,movieItem ->
        `is`++
        val Final = ce
        println(Final)

        } 

这是代码,它的输出是这个

3.7 ★ 
3.7 ★ 
3.7 ★ 
3.7 ★ 
3.7 ★ 

这不是我想要的。我已经可以这样做了,但这不是我想要的,因为它会复制结果,它应该给出不同的结果,例如4.1 3.1 2.1 4.5 3.3等

如果我在循环中使用子字符串,它将简单地限制到第一个元素,并使循环无法正常工作。

解决方法

有一种方法可以将节点文本与其内部元素分开:

val cssQueryResult: Elements = Jsoup.parse(q).select("div p:eq(2)")
val p: Element = cssQueryResult.first()
val ce: String = (p.childNode(0) as TextNode).text() // will be equal to '4.1 ★ '

应使用纯Kotlin将其他作物降至'4.1'。 根据解析结果的差异,它可能是一些正则表达式,也可能只是简单的ce.substringBeforeLast('★').trim()