Я пытаюсь проанализировать файл ресурсов XML, который находится на res > xml > my_file.xml
.Кажется, он застрял в строке -1, и я не совсем понимаю, почему это так.
Вот код:
class SPXMLParser(val context: Context){
fun parse(): MutableList<Node> {
Log.d("PONY", "We are inside SPXMLParser.parse()")
val parser = context.resources.getXml(R.xml.my_file)
Log.d("PONY", "Parser created text: ${parser.text} Parser line: ${parser.lineNumber}")
return readFeed(parser)
}
private fun readFeed(parser: XmlPullParser): MutableList<Node> {
Log.d("PONY", "Inside readFeed")
val entries = mutableListOf<Node>()
Log.d("PONY", "Before while text: ${parser.text} Parser line: ${parser.lineNumber}")
while (parser.eventType != XmlPullParser.END_DOCUMENT) {
Log.d("PONY", "While condition met text: ${parser.text} Parser line: ${parser.lineNumber}")
val name = parser.name
// Starts by looking for the entry tag
if (name == "node") {
entries.add(readEntry(parser))
} else {
skip(parser)
}
parser.next()
}
Log.d("PONY", "Before returning from readFeed")
return entries
}
// ...
private fun skip(parser: XmlPullParser) {
Log.d("PONY", "Inside skip function")
if (parser.eventType != XmlPullParser.START_TAG) {
Log.d("PONY", "About to throw up")
throw IllegalStateException()
}
var depth = 1
while (depth != 0) {
Log.d("PONY", "Inception loop")
when (parser.next()) {
XmlPullParser.END_TAG -> depth--
XmlPullParser.START_TAG -> depth++
}
}
Log.d("PONY", "Exit skip function")
}
}
А вот что мы можем прочитать в logcat:
06-01 15:51:01.972 12030-12030/com.example.learningtoparse D/PONY: We are inside onCreate
06-01 15:51:01.981 12030-12030/com.example.learningtoparse D/PONY: Parser has been created
We are inside SPXMLParser.parse()
06-01 15:51:01.982 12030-12030/com.example.learningtoparse D/PONY: Parser created text: null Parser line: -1
Inside readFeed
Before while text: null Parser line: -1
While condition met text: null Parser line: -1
Else condition
Inside skip function
About to throw up
Чего мне не хватает?Почему строка -1?
РЕДАКТИРОВАТЬ: выложил функцию skip()
и обновил следы журнала.Я знаю, что приложение останавливается, потому что выбрасывается необработанное исключение IllegalStateException
, но вопрос о том, почему анализатор находится в строке "-1", все еще остается.
EDIT2: Я нашел этот вопрос, который можетбыть связанным с моим .Тем не менее, ответ кажется немного неубедительным.У меня также есть пролог XML в моем файле:
<?xml version="1.0" encoding="UTF-8"?>
На этом ответе предлагается, что Пролог XML читается, но мы все еще в событии START_DOCUMENT
, так как корневой тег не имеетбыло прочитано еще.