#android #xml-parsing #android-xmlpullparser
Вопрос:
Я должен проанализировать приведенный ниже xml
lt;?xml version="1.0" encoding="UTF-8"?gt; lt;VAST xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"gt; lt;Ad id="5440583487"gt; lt;InLinegt; lt;AdSystemgt;DSLKDlt;/AdSystemgt; lt;/InLinegt; lt;/Adgt; lt;Ad id="239492834"gt; lt;InLinegt; lt;AdSystemgt;SLKSDlt;/AdSystemgt; lt;/InLinegt; lt;/Adgt; lt;Ad id="23042349"gt; lt;InLinegt; lt;AdSystemgt;FKDFlt;/AdSystemgt; lt;/InLinegt; lt;/Adgt; lt;/VASTgt;
Я использую XmlPullParser для его анализа. Я могу получить первый идентификатор объявления, но не после этого. Это мой код
class DataLoader(val context: Context) { suspend fun getPlayableUrls(){ withContext(Dispatchers.IO){ val inputStream = context.assets.open("ads_players2.xml") inputStream.use { inputStream -gt; val parser: XmlPullParser = Xml.newPullParser() parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false) parser.setInput(inputStream, null) parser.nextTag() readFeed(parser) } } } private fun readFeed(parser: XmlPullParser) { parser.require(XmlPullParser.START_TAG, null, "VAST") while (parser.next() != XmlPullParser.END_TAG) { if (parser.eventType != XmlPullParser.START_TAG) { continue } if (parser.name == "Ad") { println("ad id ----gt;".plus(parser.getAttributeValue(null,"id"))) readAd(parser) } else { skip(parser) } } } private fun readAd(parser: XmlPullParser){ parser.require(XmlPullParser.START_TAG, null, "Ad") while (parser.next() != XmlPullParser.END_TAG) { if (parser.eventType != XmlPullParser.START_TAG) { continue } println("ad id ----gt;".plus(parser.getAttributeValue(null,"id"))) } } private fun skip(parser: XmlPullParser) { if (parser.eventType != XmlPullParser.START_TAG) { throw IllegalStateException() } var depth = 1 while (depth != 0) { when (parser.next()) { XmlPullParser.END_TAG -gt; depth-- XmlPullParser.START_TAG -gt; depth } } } }
Что здесь не так?
Комментарии:
1. вы нашли какое-то решение? Я сталкиваюсь с той же проблемой.
2. @АбдулСалам попробуйте использовать функцию пропуска в readAd. Если возможно, поделитесь образцом проекта на github. Можете взглянуть, если хотите