Kotlin怎么解析XML XmlPullParser教程_技术教程_七洗推广网

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 = """Kotlin GuideJane"""
parser.setInput(StringReader(xmlString))

// 或从 InputStream 解析(如 assets 文件或网络响应)
// parser.setInput(inputStream, "UTF-8")

遍历事件并提取数据

XmlPullParser 通过 next()nextToken() 推进解析位置,返回事件类型。常用事件包括:

  • XmlPullParser.START_TAG:遇到开始标签(如 ),可用 parser.name 获取标签名,parser.attributeCountparser.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.next() // 移动到 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 包裹解析过程,捕获 XmlPullParserExceptionIOException

不复杂但容易忽略。

技术教程SEO

上一篇 : 编辑抖音话题怎么写标题?有什么用?

下一篇 : 京东物流单号查询入口官网 京东快递在线查询官网入口
品牌营销
专业SEO优化
添加左侧专家微信
获取产品详细报价方案