在 Android 开发中,解析 XML 文件有多种方式,每种方式都有其特点和适用场景。常见的 XML 解析方式有 DOM 解析、SAX 解析 和 XmlPullParser 解析。
一、xml 文件及数据类
1、xml 文件
- 将测试用 book.xml 文件放在项目的 app/src/main/assets 目录下,文件内容如下:
<library><book><title>Android 开发</title><author>张三</author><price>54</price></book><book><title>Java 编程</title><author>李四</author><price>34</price></book><book><title>第一行代码</title><author>王五</author><price>76</price></book></library>
2、定义数据结构
- 根据 book.xml 内容定义配套的数据类:
data class BookModel(var title: String = "",var author: String = "",var price: String = "")
3、读取 xml 文件内容
- 根据 xml 解析方式的需求,可以将 book.xml 文件读取为字符串格式或者 InputStream 格式:
/*** 从 assets 目录下读取 xml 内容*/fun readXmlFromAsset(context: Context, fileName: String): String {var content = ""try {val inputStream = context.assets.open(fileName)val reader = inputStream.reader()reader.use {content = it.readText()}} catch (e: IOException) {e.printStackTrace()Log.d(TAG, "[readXmlFromAsset] read error.")}println(content)return content}// 读取为字符串格式val xmlContent = readXmlFromAsset(MyApplication.appContext, "book.xml")// 读取为 InputStream 格式val inputStream = MyApplication.appContext.assets.open("book.xml")
二、DOM 方式解析
DOM(Document Object Model)解析是一种基于树结构的解析方式,它会将整个 XML 文件加载到内存中,解析为一个树状的 DOM 对象。这种方式适合解析较小的 XML 文件,因为它可以随机访问和修改 XML 的任意部分。DOM解析的主要优点是操作灵活,可以方便地修改、查询和遍历文档。
1、解析基本步骤
- 加载XML文档
将整个XML文档加载到内存中。 - 构建DOM树
构建一个树状结构,表示XML文档的层次结构。 - 操作DOM树
通过DOM API访问、修改或查询DOM树中的节点。 - 释放资源
完成操作后,释放加载的DOM树,以节省内存。
2、示例代码
/*** DOM 方式解析 XML 数据*/fun parseXmlByDOM(inputStream: InputStream): List<BookModel> {val bookList = mutableListOf<BookModel>()try {// 创建解析器val factory = DocumentBuilderFactory.newInstance()val builder = factory.newDocumentBuilder()// 解析 XML 文件val document = builder.parse(inputStream)// 规范化文档document.documentElement.normalize()// 获取根节点val rootName