SimpleXML Kotlin - массив элементов - PullRequest
0 голосов
/ 06 июня 2018

У меня есть XML:

<WSDConfig>
    <files>
        <file>NewQuoteAPI.xml</file>
        <file>tratata.xml</file>
    </files>
</WSDConfig>

и я хочу проанализировать его в List.Итак, у меня есть следующие классы:

@Root (name="files")
data class WSDFileDAO(@field:Element (name="file") var file : String) {
    constructor() : this("")
}

@Root (name="WSDConfig")
data class WSDConfigDAO(@field:ElementList (name="files", inline=true, required=false) var files : List<WSDFileDAO>) {
    constructor() : this(mutableListOf<WSDFileDAO>())
}

Persister().read(WSDConfigDAO::class.java, File(wsDescFileName))

Я играю с аннотациями и типами много раз, и теперь у меня есть исключение:

org.simpleframework.xml.core.PersistenceException: элемент 'file' уже используется с @ org.simpleframework.xml.Element (name = file, type = void, data = false, required = true) в поле 'file' private java.lang.String util.xml.dao.wsdesc.WSDFileDAO.file

Скажите, пожалуйста, что я делаю не так?

РЕДАКТИРОВАТЬ: И если я изменю класс WSDFileDAO на:

@Root (name="files")
data class WSDFileDAO(var file : String) {
    constructor() : this("") {}
}

Исключение составляет:

org.simpleframework.xml.core.ElementException: элемент 'file' не соответствует в классе util.xml.dao.wsdesc.WSDFileDAO

1 Ответ

0 голосов
/ 06 июня 2018

и вот я нашел решение.Для XML этого типа:

<WSDConfig>
    <file>NewQuoteAPI.xml</file>
    <file>tratata.xml</file>
</WSDConfig>

Мне просто нужно создать один класс, например

@Root (name="WSDConfig")
data class WSDConfigDAO(@field:ElementList (entry="file", inline=true, required=false) var files : List<String>) {
    constructor() : this(mutableListOf<String>())
}

Все в атрибуте entry !

...