使用SimpleXmlConverterFactory / Kotlin解析XML数组

时间:2019-05-08 09:55:13

标签: android kotlin xml-parsing retrofit2

如何从这种XML格式解析XML元素数组“ echeance”:

<data>
    <code>353</code>
    <city>Ville</city>
    <echeance ech="3">
        <subData>45</subData>
    </echeance>
    <echeance ech="6">
        <subData>45</subData>
    </echeance>
    <echeance ech="9">
        <subData>45</subData>
    </echeance>
</data>

我希望使用 SimpleXmlConverterFactory

在包含“ Echeance”对象数组的Data对象中解析此数据

现在,我有这个kotlin代码:

data class Data(val ville :String, val code :Int) {

    @get:Element(name="city")
    lateinit var city :String

    @get:Element(name="code") var remoteCode :Int = -1

    @get:ElementArray(name="echeance") lateinit var echeances :Array<Echeance>
}

class Echeance {

    @get:Attribute(name="ech") var value :Int = 0
    @get:Element(name="subData") var value :Int = 0 

}

不幸的是,我无法更改XML格式,例如将“ echance”节点嵌入到父“ echeances”节点中。

谢谢。

1 个答案:

答案 0 :(得分:0)

我找到了答案!

我必须将我的Echeance班级注释为

@Root(name = "echeance")

然后删除我的@ElementList对应项的名称属性,并将其标记为内联

@field:ElementList(inline = true, required = false) lateinit var echeances :List<Echeance>

完整代码:

data class Data(val ville :String, val code :Int) {

    @field:Element(name="city")
    lateinit var city :String

    @field:Element(name="code") var remoteCode :Int = -1

    @field:ElementList(inline = true, required = false) lateinit var echeances :List<Echeance>

}

@Root(name = "echeance")
class Echeance {

    @field:Attribute(name="ech") var value :Int = 0
    @field:Element(name="subData") var value :Int = 0 

}