📅  最后修改于: 2021-01-05 08:34:38             🧑  作者: Mango
XML文档通常用于在Internet上共享数据。以XML格式提供的数据能够经常更新,并且解析它们是基于网络的应用程序的常见任务。
在android中,存在三种类型的XML解析器来解析XML数据并在android应用程序中读取它们。
这些解析器是:
Android建议使用XMLPullParser解析XML文件,而不是SAX和DOM,因为它很快。
org.xmlpull.v1.XmlPullParser接口提供使用XMLPullParser解析XML文档的功能。
XMLPullParser的next()方法将光标指针移动到下一个事件。通常,我们使用XMLPullParser接口中定义的四个常量(作为事件工作)。
在此示例中,我们读取XML数据并将其使用XMLPullParser绑定到ListView中。
在activity_main.xml布局中添加ListView。
在资产目录中创建XML文档employee.xml,以使用XMLPullParser解析数据。
1
Sachin Kumar
50000
2
Rahul Kumar
60000
3
John Mike
70000
4
Ajay Kumar
45000
5
Toni Nayer
55000
6
Mr Bony
42000
7
Raj Kumar
30000
8
Rahul Kumar
60000
9
John Mike
70000
10
Sachin Kumar
50000
11
Rahul Kumar
60000
12
John Mike
70000
创建一个与XML数据文件相对应的数据模型类Employee.kt。
package example.javatpoint.com.kotlinxmlparsingusingxmlpullparser
class Employee {
var id: Int = 0
var name: String? = null
var salary: Float = 0.toFloat()
override fun toString(): String {
return " Id = $id\n Name = $name\n Salary = $salary"
}
}
编写代码以使用XMLPullParser解析XML文件。在此类中,我们返回列表中的所有员工。
package example.javatpoint.com.kotlinxmlparsingusingxmlpullparser
import org.xmlpull.v1.XmlPullParserException
import org.xmlpull.v1.XmlPullParser
import org.xmlpull.v1.XmlPullParserFactory
import java.io.IOException
import java.io.InputStream
class XmlPullParserHandler {
private val employees = ArrayList()
private var employee: Employee? = null
private var text: String? = null
fun parse(inputStream: InputStream): List {
try {
val factory = XmlPullParserFactory.newInstance()
factory.isNamespaceAware = true
val parser = factory.newPullParser()
parser.setInput(inputStream, null)
var eventType = parser.eventType
while (eventType != XmlPullParser.END_DOCUMENT) {
val tagname = parser.name
when (eventType) {
XmlPullParser.START_TAG -> if (tagname.equals("employee", ignoreCase = true)) {
// create a new instance of employee
employee = Employee()
}
XmlPullParser.TEXT -> text = parser.text
XmlPullParser.END_TAG -> if (tagname.equals("employee", ignoreCase = true)) {
// add employee object to list
employee?.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
}
}
在此类中,我们将XML数据发送到ArrayAdapter并将其绑定到ListView。
package example.javatpoint.com.kotlinxmlparsingusingxmlpullparser
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.ListView
import java.io.IOException
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val listView = findViewById(R.id.listView)
var employees: List? = 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()
}
}
}
输出: