如何在 kotlin 中使用改造来解析 xml 响应?

How to parse xml response using retrofit in kotlin?

我有以下回复:

<?xml version="1.0" encoding="utf-8" ?>
<rsp stat="ok">
    <photos page="1" pages="3704" perpage="100" total="370320">
        <photo id="49658592343" owner="138998919@N06" secret="0db4e03977" server="65535" farm="66" title="mmm " ispublic="1" isfriend="0" isfamily="0" />
        <photo id="49658586758" owner="156045424@N06" secret="2444dda679" server="65535" farm="66" title="Boeing 787-9 (G-CKOG) Norwegian Airlines" ispublic="1" isfriend="0" isfamily="0" />
        <photo id="49659129251" owner="156045424@N06" secret="97d1bd202e" server="65535" farm="66" title="Boeing 787-9 (G-CKOG) Norwegian Airlines" ispublic="1" isfriend="0" isfamily="0" />
         </photos>
</rsp>

我正在使用 SimpleXmlConverterFactory 作为改装转换器。我已通过在线转换器将上述响应转换为 json,并从中创建数据 class,父级 class 是如下:

data class ResponseImages(
    val photos: Photos,
    val stat: String
)

但我每次 运行 应用程序时都会收到此错误:

org.simpleframework.xml.core.AttributeException: Attribute 'stat' does not have a match in class com.abx.cbz.Response.ResponseImages at line -1

所以我做错了什么?

通过阅读各种 SO 线程,我设法使用以下代码块使其工作:

@Root(name = "photos")
data class Photos @JvmOverloads constructor(

    @field:Attribute(name = "page")
    @param:Attribute(name = "page")
    var page: String,

    @field:Attribute(name = "pages")
    @param:Attribute(name = "pages")
    var pages: String,

    @field:Attribute(name = "perpage")
    @param:Attribute(name = "perpage")
    var perpage: String,

    @field:ElementList(name = "photo", inline = true)
    @param:ElementList(name = "photo", inline = true)
    var photo: List<Photo>,

    @field:Attribute(name = "total")
    @param:Attribute(name = "total")
    var total: String
)

其他数据也应该使用相同的格式类,我只显示一个。需要有一个空的构造函数,这就是我使用 @JvmOverloads 的原因,但是 @param 注释的使用还不是很清楚,一个简短的想法是我们必须强制 Kotlin 生成构造函数重载。