解析xml kotlin android

我有这样的XML:

   Сегодня вас могут здорово огорчить. Если от расстройства все начнет валится из рук, просто спокойно сядьте и тихонько подождите хорошей новости.     Сегодня у вас могут возникнуть проблемы на личном фронте. Спасти вас от перспективы оказаться не у дел может сухой, рациональный и в высшей степени объективный подход к проблеме.    

现在我正在学习kotlin whith翻新。 我包括解析XML的库,而不是我不能理解如何创建对象来解析这个XML。 我有对象:

 @Root(name = "horo", strict = false) open class DailyHoroscope{ @get : Element(name = "aries") var aries : Aries? = null } @Root(name = "aries", strict = false) open class Aries{ @get : Element(name = "today") var today : String? = null } 

但我有错误:

rg.simpleframework.xml.core.ConstructorException:默认的构造函数不能接受只读类org.simpleframework.xml.Element(data = false,name = aries,required = true,type = void) .kotlintest.model。

UPD

我在java中编写代码:

 @Root(name = "horo", strict = false) public class DailyHoroscopeJ { @Element(name = "aries") public Aries aries; public Aries getAries() { return aries; } public void setAries(Aries aries) { this.aries = aries; } } @Root(name = "aries", strict = false) class Aries{ @Element(name = "today") public String today; public String getToday() { return today; } public void setToday(String today) { this.today = today; } } 

它工作正常,然后我转换到KOTLIN

 @Root(name = "horo", strict = false) class DailyHoroscope { @get:Element(name = "aries") var aries:Aries? = null } @Root(name = "aries", strict = false) class Aries { @get:Element(name = "today") var today:String? = null } 

但我有同样的问题((((

@daementus的答案几乎是完美的。 如果你想使用默认参数构造函数注入,你必须强制Kotlin生成构造函数重载:

 data class Section @JvmOverloads constructor( @field:Element(name = "id") @param:Element(name = "id") val id: Long, @field:Attribute(name = "title", required = false) @param:Attribute(name = "title", required = false) val title: String = "" ) 

没有它,你会得到Constructor不匹配类部分 。 默认情况下,Kotlin生成一个包含所有参数和特殊构造函数的构造函数。

注意:我宁愿在评论中回答,但我没有足够的分数。

事实上,简单的XML框架在Kotlin属性方面有一些问题,让事情发挥作用可能有点棘手。

说实话,我不太清楚在你的具体情况下是什么问题,但我猜测不应该为getter指定注释,而应该为field指定注释。

无论如何,我这样结合Simple XML和Kotlin数据类,它似乎工作正常:)

 data class Section ( @field:Element(name = "id", required = false) @param:Element(name = "id", required = false) val id: Long? = null, @field:Attribute(name = "title", required = false) @param:Attribute(name = "title", required = false) val title: String? = null ) 

编辑:如果你不想使用数据类(我强烈建议,但你可能有一个原因),这应该工作,没有“数据”关键字就好了。 如果你不想创建一个构造函数,只需将属性声明直接移入类中,并抛弃@param注释(@field必须保留)。