如何解析其中包含属性的 XML 元素?安卓、科特林

问题描述 投票:0回答:2

我有一个来自服务器的 XML 文件。我使用 xmlPullPrser 将其解析为 Kotlin,但它有一个 'id' 属性。我不知道如何获取“id”值。预先感谢您的答复。 这是我的 xml 文件的一部分:

```    
<videoList >
    <video id="843">
        <title></title>
        <author>Ghoneim</author> 
    </video>
    <video id="887">
        <title>Anatomic</title>
        <author>Tewari</author>
    </video>
</videoList>
```

这是我使用 XmlPullParser 的代码的一些部分:

```
class VideoXmlParser {
@Throws(XmlPullParserException::class, IOException::class)
fun parse(inputStream: InputStream): List<Videos> {
    inputStream.use { inputStream ->
        val parser: XmlPullParser = Xml.newPullParser()
        parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false)
        parser.setInput(inputStream, null)
        parser.nextTag()
        return readVideoList(parser)
    }
}

}

@Throws(XmlPullParserException::class, IOException::class)
    fun readVideoList(parser: XmlPullParser): List<Videos> {
         val videos = mutableListOf<Videos>()
         parser.require(XmlPullParser.START_TAG, ns, "videoList")
         while (parser.next() != XmlPullParser.END_TAG) {
            if (parser.eventType != XmlPullParser.START_TAG) {
              continue
    }

    // Starts by looking for the video tag
    if (parser.name == "video") {
        videos.add(readVideo(parser))
    } else {
        skip(parser)
    }
}
return videos

}
```
android xml kotlin xmlpullparser
2个回答
0
投票

一旦您的

parser
位于“video”标签,您就可以使用
parser.getAttributeValue


0
投票

您可以使用 XmlPullParser.getAttributeValue(String namespace, 字符串名称).

这是一个例子。

val xml = """
    <videoList>
        <video id="843">
            <title></title>
            <author>Ghoneim</author> 
        </video>
        <video id="887">
            <title>Anatomic</title>
            <author>Tewari</author>
        </video>
    </videoList>
""".trimIndent()

val parser = Xml.newPullParser().apply {
    setInput(xml.byteInputStream(), null)
}
val videoIds = readVideoIds(parser) // [843, 887]
fun readVideoIds(parser: XmlPullParser) = buildList {
    do {
        val eventType = parser.next()
        if (eventType == XmlPullParser.START_TAG && parser.name == "video") {
            add(parser.getAttributeValue(null, "id"))
        }
    } while (eventType != XmlPullParser.END_DOCUMENT)
}
© www.soinside.com 2019 - 2024. All rights reserved.