class ContentHandler DefaultHandler private var nodeName = private lateinit var id StringBuilder private lateinit var name StringBuilder private lateinit var version StringBuilder sta
在Kotlin中,如果要重写父类的方法,需要使用override关键字。在这种情况下,ContentHandler类应该继承自DefaultHandler类并使用override关键字来重写父类的方法。以下是修正后的代码:
class ContentHandler : DefaultHandler() {
private var nodeName = ""
private lateinit var id: StringBuilder
private lateinit var name: StringBuilder
private lateinit var version: StringBuilder
//startDocument()方法会在开始XML解析的时候调用
override fun startDocument() {
//super.startDocument()
id = StringBuilder()
name = StringBuilder()
version = StringBuilder()
}
//startElement()方法会在开始解析某个节点的时候调用
override fun startElement(
uri: String,
localName: String,
qName: String,
attributes: Attributes
) {
//super.startElement(uri, localName, qName, attributes)
// 记录当前节点名
nodeName = localName
Log.d("ContentHandler", "uri is $uri")
Log.d("ContentHandler", "localName is $localName")
Log.d("ContentHandler", "qName is $qName")
Log.d("ContentHandler", "attributes is $attributes")
}
//characters()方法会在获取节点中内容的时候调用
override fun characters(ch: CharArray, start: Int, length: Int) {
//super.characters(ch, start, length)
// 根据当前节点名判断将内容添加到哪一个StringBuilder对象中
when (nodeName) {
"id" -> id.append(ch, start, length)
"name" -> name.append(ch, start, length)
"version" -> version.append(ch, start, length)
}
}
//endElement()方法会在完成解析某个节点的时候调用
override fun endElement(uri: String, localName: String, qName: String) {
//super.endElement(uri, localName, qName)
if ("app" == localName) {
Log.d("ContentHandler", "id is ${id.toString().trim()}")
Log.d("ContentHandler", "name is ${name.toString().trim()}")
Log.d("ContentHandler", "version is ${version.toString().trim()}")
// 最后要将StringBuilder清空
id.setLength(0)
name.setLength(0)
version.setLength(0)
}
}
//endDocument()方法会在完成整个XML解析的时候调用
override fun endDocument() {
//super.endDocument()
}
}
``
原文地址: http://www.cveoy.top/t/topic/iHer 著作权归作者所有。请勿转载和采集!