class ContentHandler : DefaultHandler() {\n private var nodeName = ""\n private lateinit var id: StringBuilder\n private lateinit var name: StringBuilder\n private lateinit var version: StringBuilder\n\n //startDocument()方法会在开始XML解析的时候调用\n override fun startDocument() {\n //super.startDocument()\n id = StringBuilder()\n name = StringBuilder()\n version = StringBuilder()\n }\n\n //startElement()方法会在开始解析某个节点的时候调用\n override fun startElement(\n uri: String,\n localName: String,\n qName: String,\n attributes: Attributes\n ) {\n //super.startElement(uri, localName, qName, attributes)\n // 记录当前节点名\n nodeName = localName\n Log.d("ContentHandler", "uri is $uri")\n Log.d("ContentHandler", "localName is $localName")\n Log.d("ContentHandler", "qName is $qName")\n Log.d("ContentHandler", "attributes is $attributes")\n }\n\n //characters()方法会在获取节点中内容的时候调用\n override fun characters(ch: CharArray, start: Int, length: Int) {\n //super.characters(ch, start, length)\n // 根据当前节点名判断将内容添加到哪一个StringBuilder对象中\n when (nodeName) {\n "id" -> id.append(ch, start, length)\n "name" -> name.append(ch, start, length)\n "version" -> version.append(ch, start, length)\n }\n }\n\n //endElement()方法会在完成解析某个节点的时候调用\n override fun endElement(uri: String, localName: String, qName: String) {\n //super.endElement(uri, localName, qName)\n if ("app" == localName) {\n Log.d("ContentHandler", "id is ${id.toString().trim()}")\n Log.d("ContentHandler", "name is ${name.toString().trim()}")\n Log.d("ContentHandler", "version is ${version.toString().trim()}")\n // 最后要将StringBuilder清空\n id.setLength(0)\n name.setLength(0)\n version.setLength(0)\n }\n }\n\n //endDocument()方法会在完成整个XML解析的时候调用\n override fun endDocument() {\n //super.endDocument()\n }\n}

Kotlin XML解析:使用DefaultHandler解析XML数据

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

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