【发布时间】: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