#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