如何在 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 生成构造函数重载。
我有以下回复:
<?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 生成构造函数重载。