Ошибка анализатора данных анализатора Android SimpleXML

#android #kotlin

#Android #kotlin

Вопрос:

Я получил следующий результат от API, и мне нужно это использовать.

 <resultcode>0</resultcode>
<config>
    <item>
        <c_no>1040120094364111</c_no>
        <cdate>20201224100000</cdate>
        <u_d>0</u_d>
        <fare>1250</fare>
        <balance>9750</balance>
        <area>AF0142</area>
        <bc_no>12</bc_no>
    </item>
    <item>
        <c_no>1040120094364111</c_no>
        <cdate>20201224100000</cdate>
        <u_d>0</u_d>
        <fare>1250</fare>
        <balance>9750</balance>
        <area>AF0142</area>
        <bc_no>12</bc_no>
    </item>
</config>
 

Я пытаюсь проанализировать приведенные выше данные с помощью SimpleXmlParser.

Класс данных, который я использовал, выглядит следующим образом

 @Root
data class TransActionResponse @JvmOverloads constructor(
    @field:ElementList(name = "config", required = false, inline = true)
    var config: TransActionConfig? = null,
    @field:Element(name = "resultCode", required = false)
    var resultCode: Int
)

@Root(name = "config", strict = false)
data class TransActionConfig @JvmOverloads constructor(
    @field:ElementList(name = "item", required = false, inline = true)
    var item: ArrayList<TransActionItem> = arrayListOf()
)
 

Однако возникает следующая ошибка

 Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,67]
    Message: start tag not allowed in epilog but got c
 

Как я могу проанализировать приведенные выше данные? Пожалуйста, помогите мне

Комментарии:

1. использовать github.com/Tickaroo/tikxml SimpleXmlConverterFactory устарел

2. @Raghunandan Можете ли вы решить вышеуказанную проблему с помощью tikxml?

3. конечно, я опубликую ответ

Ответ №1:

Вы можете использовать https://github.com/Tickaroo/tikxml как https://github.com/square/retrofit/tree/master/retrofit-converters/simplexml является устаревшим

Добавьте приведенное ниже в файл build.gradle

 implementation 'com.github.Tickaroo.tikxml:annotation:0.8.15'
implementation 'com.github.Tickaroo.tikxml:core:0.8.15'
kapt 'com.github.Tickaroo.tikxml:processor-common:0.8.15'
kapt 'com.github.Tickaroo.tikxml:processor:0.8.15'
 

В случае, если вы используете модернизацию

 implementation 'com.tickaroo.tikxml:retrofit-converter:0.8.15'
 

Не забудьте добавить

 plugins {'
id 'kotlin-kapt'
}
 

При модернизации сборки добавьте следующее

  .addConverterFactory(
        TikXmlConverterFactory.create(
            TikXml.Builder()
                .exceptionOnUnreadXml(false)
                .build()
        )
 )
 

Ваш класс данных

 @Xml
data class TransactionResponse (
@PropertyElement(name = "resultcode")
var resultcode: Int = 0,

@Element(name="config")
var config: Config
 

)

Ваш класс конфигурации

 @Xml
data class Config( @Element
                   var item: List<Item>)
 

Ваш класс элемента

 @Xml
data class Item (
    @PropertyElement(name="c_no")
    var cNumber: String,

    @PropertyElement(name="c_date")
    var date: String,

    @PropertyElement(name="u_d)
    var uD: Int = 0,

    @PropertyElement(name="fare")
    var fare: Int = 0,

    @PropertyElement(name="balance")
    var balance: Int = 0,

    @PropertyElement(name="area")
    var area: String,

    @PropertyElement(name="bc_no")
    var bcno: Int = 0
)
 

Если вы войдете в систему, вы должны увидеть

 Result code: 0
Area code: AF0142
C Number: 1040120094364111
Area code: AF0142
C Number: 1040120094364111