Android 中 解析 XML 文件的几种方式

在 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 

你可能感兴趣的:(Android,新起点,android,xml)