Анализ XML с помощью XmlPullParser android

#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. Можете взглянуть, если хотите