XmlPullParser 使用 Kotlin 读取标签内的值

XmlPullParser Read value inside a Tag with Kotlin

我有以下 rss:https://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml 我可以毫无问题地阅读所有信息,但只有一个标签: <media:content height="151" medium="image" url="https://someurl.jpg" width="151"/>

我需要此标签中的 url,但我不知道如何从标签中获取信息。其余信息在两个标签之间,所以没有问题,但这个信息在标签本身上。

我的解析函数是这样的

fun parse(inputStream: InputStream): List<RssItem> {
        try {
            val factory = XmlPullParserFactory.newInstance()
            factory.isNamespaceAware = true
            val parser = factory.newPullParser()
            parser.setInput(inputStream, null)
            var eventType = parser.eventType
            var foundItem = false
            while (eventType != XmlPullParser.END_DOCUMENT) {
                val tagname = parser.name
                when (eventType) {
                    XmlPullParser.START_TAG -> if (tagname.equals("item", ignoreCase = true)) {
                        foundItem = true
                        rssItem = RssItem()
                    }
                    XmlPullParser.TEXT -> text = parser.text

                    XmlPullParser.END_TAG -> if (tagname.equals("item", ignoreCase = true)) {
                        rssItem?.let { rssItems.add(it) }
                        foundItem = false
                    } else if (foundItem && tagname.equals("title", ignoreCase = true)) {
                        rssItem!!.title = text.toString()
                    } else if (foundItem && tagname.contains("guid", ignoreCase = true)) {
                        rssItem!!.link = text.toString()
                    } else if (foundItem && tagname.equals("description", ignoreCase = true)) {
                        rssItem!!.description = text.toString()
                    } else if (foundItem && tagname.contains("creator", ignoreCase = true)) {
                        rssItem!!.creator = text.toString()
                    } else if (foundItem && tagname.equals("pubDate", ignoreCase = true)) {
                        rssItem!!.pubDate = text.toString()
                    }else if (foundItem && tagname.contains("content", ignoreCase = true)) {
                        rssItem!!.image = parser.getAttributeValue(0)
                    }
                }
                eventType = parser.next()

在最后一个 else if 中,我试图获得 url 值,但是 parser.getAttributeValue(0) 得到 IndexOutOfBoundsException 如果我这样做 text.toString()在另一个 else if 中,不粉碎,但 returns null 当然是因为两个标签之间没有任何东西 关于如何从标签本身读取信息的任何线索??? 非常感谢

尝试读取 START_TAG 子句中的属性,如下所示。

while (eventType != XmlPullParser.END_DOCUMENT) {
    val tagname = parser.name
    when (eventType) {
        XmlPullParser.START_TAG -> if (tagname.equals("item", ignoreCase = true)) {
            foundItem = true
            rssItem = RssItem()
        } else if (foundItem && tagname.contains("content", ignoreCase = true)) {

            //rssItem!!.image = parser.getAttributeValue(0)
            rssItem!!.image = parser.getAttributeValue("", "url")
        }
        :
    }
    :
}