【问题标题】:XmlPullParser Read value inside a Tag with KotlinXmlPullParser 使用 Kotlin 读取标签内的值
【发布时间】:2021-07-18 19:35:04
【问题描述】:

我有以下 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 如果我像在另一个 else if 中那样做 text.toString(),不会粉碎但返回 @ 987654329@ 当然是因为两个标签之间没有任何东西 关于如何从标签本身读取信息的任何线索??? 非常感谢

【问题讨论】:

    标签: android kotlin rss-reader xmlpullparser android-xmlpullparser


    【解决方案1】:

    尝试如下读取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")
            }
            :
        }
        :
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多