Kotlin实现xml文件解析

package com.android.test.kmmtest

import org.w3c.dom.Element
import org.xml.sax.InputSource
import java.io.File
import java.io.StringReader
import java.nio.charset.Charset
import javax.xml.parsers.DocumentBuilderFactory

/**
 * Usage:
 *
 * author:test
 * Date:2023/4/18
 * Description:
 */
class TestXmlPaser {
    companion object {
        fun loadXml(absolutePath: String): List<WebsiteCluster>{
            val inputStream = File(absolutePath).inputStream()
            var content = inputStream.readBytes().toString(Charset.forName("GBK"))
            val websiteClusterList = ArrayList<WebsiteCluster>()
            val builderFactory = DocumentBuilderFactory.newInstance()
            val builder = builderFactory.newDocumentBuilder()
            val inputSource = InputSource(StringReader(content))
            val document = builder.parse(inputSource)
            val rootNode = document.documentElement
            // 遍历 XML 文件中的元素
            val elements = rootNode.getElementsByTagName("Cluster")
            for (i in 0 until elements.length) {
                val element = elements.item(i) as Element
                val websiteCluster = WebsiteCluster()
                websiteCluster .mstrID = element.getAttribute("ID")
                websiteCluster .mstrName = element.getAttribute("Name")
                websiteCluster .mstrDefHost = element.getAttribute("DefHost")
                websiteCluster .mbBalance = element.getAttribute("Balance")
                val websiteHost = websiteCluster .GetNewWebsiteHost()
                val chiElements = element.getElementsByTagName("Host")
                for (j in 0 until chiElements.length){
                    val chiElement = chiElements.item(j) as Element
                    websiteHost ?.mstrID = chiElement.getAttribute("ID")
                    websiteHost ?.mstrName = chiElement.getAttribute("Name")
                    websiteHost ?.mstrAddr = chiElement.getAttribute("Addr")
                    websiteHost ?.mstrPort = chiElement.getAttribute("Port")
                }
                websiteClusterList .add(websiteCluster )
            }
            return websiteClusterList 
        }
    }
}
package com.android.test.kmmtest

/**
 * Usage:
 *
 * author:test
 * Date:2023/4/18
 * Description:
 */
class WebsiteCluster {
    var mstrID = ""
    var mstrName = ""
    var mstrDefHost = ""
    var mbBalance = ""
    var mHostList = ArrayList<websiteHost>()

    fun GetNewWebsiteHost(): websiteHost? {
        val theWebsiteHost = tdxTaapiHost()
        mHostList!!.add(theWebsiteHost )
        return theWebsiteHost 
    }

    class websiteHost{
        var mstrID = ""
        var mstrName = ""
        var mstrAddr = ""
        var mstrAddrIPV6 = ""
        var mstrPort = ""
        var mstrUseIPV6 = ""
        var mstrWeightFactor = ""
    }
}

测试:

String absolutePath = Environment.getExternalStorageDirectory() + "/Android/data/com.android.test.kmmtest/files/Documents/user/website.xml";
TestXmlPaser.Companion.loadXml(absolutePath);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汤面不加鱼丸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值