Kotlin怎么解析XML XmlPullParser教程
#技术教程 发布时间: 2025-12-25
Kotlin中使用XmlPullParser解析XML是轻量高效且Android原生支持的拉式解析方式。它比DOM省内存、比SAX易控制流程;无需额外依赖,但需按需声明网络或存储权限;通过XmlPullParserFactory获取实例并设置输入源,利用next()遍历START_TAG、TEXT、END_TAG等事件提取数据,建议封装数据类、处理空值并捕获异常。
Kotlin 中使用 XmlPullParser 解析 XML 是一种轻量、高效且 Android 原生支持的方式。它采用事件驱动的“拉式解析”(pull parsing),比 DOM 更省内存,比 SAX 更易控制流程。
添加依赖与权限(Android 项目)
Android 系统已内置 XmlPullParser,无需额外依赖。但需确保在 AndroidManifest.xml 中声明网络或存储权限(如果 XML 来自网络或本地文件):
- 读取网络 XML:添加
- 读取外部存储 XML:添加
(注意 Android 10+ 的分区存储限制)
获取 XmlPullParser 实例
推荐使用 XmlPullParserFactory 创建实例,并设置输入源:
val factory = XmlPullParserFactory.newInstance() factory.isNamespaceAware = false // 通常可设为 false,除非 XML 含命名空间 val parser = factory.newPullParser() // 示例:从字符串解析 val xmlString = """""" parser.setInput(StringReader(xmlString)) // 或从 InputStream 解析(如 assets 文件或网络响应) // parser.setInput(inputStream, "UTF-8") Kotlin Guide Jane
遍历事件并提取数据
XmlPullParser 通过 next() 或 nextToken() 推进解析位置,返回事件类型。常用事件包括:
-
XmlPullParser.START_TAG:遇到开始标签(如),可用parser.name获取标签名,parser.attributeCount和parser.getAttributeValue(i)读取属性 -
XmlPullParser.TEXT:当前位于文本内容(注意:可能为空白或换行,建议用parser.text.trim().isNotBlank()过滤) -
XmlPullParser.END_TAG:遇到结束标签(如) -
XmlPullParser.END_DOCUMENT:解析完成
典型解析循环结构如下:
var eventType = parser.eventType
while (eventType != XmlPullParser.END_DOCUMENT) {
when (eventType) {
XmlPullParser.START_TAG -> {
when (parser.name) {
"title" -> {
parser.ne
xt() // 移动到 TEXT 事件
if (parser.eventType == XmlPullParser.TEXT) {
val title = parser.text.trim()
println("Title: $title")
}
}
"author" -> {
parser.next()
if (parser.eventType == XmlPullParser.TEXT) {
val author = parser.text.trim()
println("Author: $author")
}
}
}
}
}
eventType = parser.next()
}
处理嵌套结构与错误容错
面对复杂 XML(如多本书、带属性的节点),建议封装成数据类,并用栈或状态变量跟踪层级。例如:
- 定义
data class Book(val title: String = "", val author: String = "") - 遇到
时新建临时对象;遇到时加入列表 - 始终检查
parser.text是否为 null 或空白,避免空指针 - 用 try-catch 包裹解析过程,捕获
XmlPullParserException和IOException
不复杂但容易忽略。
技术教程SEO上一篇 : 编辑抖音话题怎么写标题?有什么用?
下一篇 : 京东物流单号查询入口官网 京东快递在线查询官网入口
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!
xt() // 移动到 TEXT 事件
if (parser.eventType == XmlPullParser.TEXT) {
val title = parser.text.trim()
println("Title: $title")
}
}
"author" -> {
parser.next()
if (parser.eventType == XmlPullParser.TEXT) {
val author = parser.text.trim()
println("Author: $author")
}
}
}
}
}
eventType = parser.next()
}