Разбор XML-массива с помощью SimpleXmlConverterFactory / Kotlin - PullRequest
0 голосов
/ 08 мая 2019

Как я могу проанализировать массив элементов XML "echeance" из этого формата XML:

<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>

Я хочу, чтобы эти данные были проанализированы в объекте данных, содержащем массив объектов "Echeance", используя SimpleXmlConverterFactory

На данный момент у меня есть следующий код котлина:

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 голосов
/ 08 мая 2019

Я нашел ответ!

Я должен аннотировать свой класс Echeance как

@Root(name = "echeance")

, затем удалить атрибут имени для моих echeance @ElementList и пометить как inline

@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 

}
...