问题描述
我有这个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()