在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()
    }
}
``
class ContentHandler DefaultHandler private var nodeName = private lateinit var id StringBuilder private lateinit var name StringBuilder private lateinit var version StringBuilder sta

原文地址: http://www.cveoy.top/t/topic/iHer 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录