Kotlin Android XMLPullParser教程

本文概述

  • XmlPullParser的事件
  • 使用XMLPullParser进行XML解析的示例
XML文档通常用于在Internet上共享数据。以XML格式提供的数据能够经常更新, 并且解析它们是基于网络的应用程序的常见任务。
在android中, 存在三种类型的XML解析器来解析XML数据并在android应用程序中读取它们。
这些解析器是:
  1. DOM解析器
  2. SAX解析器
  3. XMLPullParser
Android建议使用XMLPullParser解析XML文件, 而不是SAX和DOM, 因为它很快。
org.xmlpull.v1.XmlPullParser接口提供使用XMLPullParser解析XML文档的功能。
XmlPullParser的事件 【Kotlin Android XMLPullParser教程】XMLPullParser的next()方法将光标指针移动到下一个事件。通常, 我们使用XMLPullParser接口中定义的四个常量(作为事件工作)。
  1. START_TAG:将读取XML开始标记。
  2. 文本:已读取文本内容, 可以使用getText()方法检索文本内容。
  3. END_TAG:将读取一个结束标签。
  4. END_DOCUMENT:没有更多活动可用。
使用XMLPullParser进行XML解析的示例 在此示例中, 我们读取XML数据并将其使用XMLPullParser绑定到ListView中。
activity_main.xml
在activity_main.xml布局中添加ListView。
< ?xml version="1.0" encoding="utf-8"?> < android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="example.srcmini.com.kotlinxmlparsingusingxmlpullparser.MainActivity"> < ListViewandroid:id="@+id/listView"android:layout_width="match_parent"android:layout_height="wrap_content" > < /ListView> < /android.support.constraint.ConstraintLayout>

员工.xml
在资产目录中创建XML文档employee.xml, 以使用XMLPullParser解析数据。
< ?xml version="1.0" encoding="UTF-8"?> < employees> < employee> < id> 1< /id> < name> Sachin Kumar< /name> < salary> 50000< /salary> < /employee> < employee> < id> 2< /id> < name> Rahul Kumar< /name> < salary> 60000< /salary> < /employee> < employee> < id> 3< /id> < name> John Mike< /name> < salary> 70000< /salary> < /employee> < employee> < id> 4< /id> < name> Ajay Kumar< /name> < salary> 45000< /salary> < /employee> < employee> < id> 5< /id> < name> Toni Nayer< /name> < salary> 55000< /salary> < /employee> < employee> < id> 6< /id> < name> Mr Bony< /name> < salary> 42000< /salary> < /employee> < employee> < id> 7< /id> < name> Raj Kumar< /name> < salary> 30000< /salary> < /employee> < employee> < id> 8< /id> < name> Rahul Kumar< /name> < salary> 60000< /salary> < /employee> < employee> < id> 9< /id> < name> John Mike< /name> < salary> 70000< /salary> < /employee> < employee> < id> 10< /id> < name> Sachin Kumar< /name> < salary> 50000< /salary> < /employee> < employee> < id> 11< /id> < name> Rahul Kumar< /name> < salary> 60000< /salary> < /employee> < employee> < id> 12< /id> < name> John Mike< /name> < salary> 70000< /salary> < /employee> < /employees>

员工
创建一个与XML数据文件相对应的数据模型类Employee.kt。
package example.srcmini.com.kotlinxmlparsingusingxmlpullparserclass Employee {var id: Int = 0var name: String? = nullvar salary: Float = 0.toFloat()override fun toString(): String {return " Id = $id\n Name = $name\n Salary = $salary"}}

XmlPullParserHandler.kt
编写代码以使用XMLPullParser解析XML文件。在此类中, 我们返回列表中的所有员工。
package example.srcmini.com.kotlinxmlparsingusingxmlpullparserimport org.xmlpull.v1.XmlPullParserExceptionimport org.xmlpull.v1.XmlPullParserimport org.xmlpull.v1.XmlPullParserFactoryimport java.io.IOExceptionimport java.io.InputStreamclass XmlPullParserHandler {private val employees = ArrayList< Employee> ()private var employee: Employee? = nullprivate var text: String? = nullfun parse(inputStream: InputStream): List< Employee> {try {val factory = XmlPullParserFactory.newInstance()factory.isNamespaceAware = trueval parser = factory.newPullParser()parser.setInput(inputStream, null)var eventType = parser.eventTypewhile (eventType != XmlPullParser.END_DOCUMENT) {val tagname = parser.namewhen (eventType) {XmlPullParser.START_TAG -> if (tagname.equals("employee", ignoreCase = true)) {// create a new instance of employeeemployee = Employee()}XmlPullParser.TEXT -> text = parser.textXmlPullParser.END_TAG -> if (tagname.equals("employee", ignoreCase = true)) {// add employee object to listemployee?.let { employees.add(it) }} else if (tagname.equals("id", ignoreCase = true)) {employee!!.id = Integer.parseInt(text)} else if (tagname.equals("name", ignoreCase = true)) {employee!!.name = text} else if (tagname.equals("salary", ignoreCase = true)) {employee!!.salary = java.lang.Float.parseFloat(text)}else -> {}}eventType = parser.next()}} catch (e: XmlPullParserException) {e.printStackTrace()} catch (e: IOException) {e.printStackTrace()}return employees}}

MainActivity.kt
在此类中, 我们将XML数据发送到ArrayAdapter并将其绑定到ListView。
package example.srcmini.com.kotlinxmlparsingusingxmlpullparserimport android.support.v7.app.AppCompatActivityimport android.os.Bundleimport android.widget.ArrayAdapterimport android.widget.ListViewimport java.io.IOException class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState) setContentView(R.layout.activity_main)val listView = findViewById< ListView> (R.id.listView)var employees: List< Employee> ? = null try {val parser = XmlPullParserHandler()val istream = assets.open("employees.xml")employees = parser.parse(istream)val adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, employees)listView.adapter = adapter} catch (e: IOException) {e.printStackTrace()}}}

输出:
Kotlin Android XMLPullParser教程

文章图片

    推荐阅读