You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在KMM中解析HTML?Android与iOS跨平台APP开发咨询

KMM多平台HTML解析替代方案

不需要为Android和iOS分别编写实现,目前有几个成熟的跨平台方案可以替代Jsoup:

1. 社区维护的多平台Jsoup变体

有第三方将Jsoup移植到了KMM环境,API和原生Jsoup几乎完全一致,能直接在共用模块中使用,Android端的原有代码可以平滑迁移。只需在项目中引入对应的依赖,就能像原来那样调用Jsoup.parse()等核心方法,iOS端也能正常编译运行。

2. Ktor内置HTML解析器

如果你的项目已经在使用Ktor进行网络请求,可以直接用它自带的HTML解析能力,无需额外引入大体积库。通过parseHtmlDocument()方法将HTML字符串解析为DOM结构,再通过标准的DOM API或Kotlin DSL操作节点,示例代码如下:

import io.ktor.html.parseHtmlDocument
import org.w3c.dom.Element

fun extractHtmlTitle(htmlContent: String): String? {
    val document = htmlContent.parseHtmlDocument()
    return document.querySelector("title")?.textContent
}

3. 原生平台分别实现(仅作为备选)

如果上述跨平台方案无法满足特定需求,再考虑通过KMM的expect/actual机制封装统一接口,各自实现解析逻辑:

  • Android端继续使用Jsoup
  • iOS端可以用系统的NSXMLParser或者Swift第三方库如Fuzi

示例封装逻辑:
共用模块定义接口:

expect fun parseHtmlTitle(html: String): String?

Android端实现:

actual fun parseHtmlTitle(html: String): String? {
    return org.jsoup.Jsoup.parse(html).title()
}

iOS端实现(依赖Fuzi):

actual fun parseHtmlTitle(html: String): String? {
    return Fuzi.Document(html)?.firstChild(tag = "title")?.stringValue
}

总结:优先选择跨平台库方案,能大幅减少代码维护成本,只有在跨平台库功能无法覆盖需求时,才考虑原生分别实现。

内容的提问来源于stack exchange,提问作者dev_nil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:45:37