Pur*_*iya 7 android xml-parsing kotlin retrofit
我正在尝试调用其余的 api,它会给我 xml 响应。我正在使用 simplexml 转换器工厂进行改造,将 xml 解析为 kotlin 数据类。以下是 api 的 xml 响应:
<category>
<api-version>1.0</api-version>
<books>
<list>
<result>
<author>Hello1</author>
<brief>Hii</brief>
</result>
<result>
<author>Hello2</author>
<brief>Hii2</brief>
</result>
</list>
</books>
</category>
Run Code Online (Sandbox Code Playgroud)
下面是我的 kotlin 数据类
data class CategoryResponseModel(
@field:Element(name = "api-version", required = false)
@param:Element(name = "api-version", required = false)
val apiVersion: String? = null,
@field:Element(name = "books", required = false)
@param:Element(name = "books", required = false)
val books: Books? = null
)
data class Books(
@field:Element(name = "list", required = false)
@param:Element(name = "list", required = false)
val list: BookList? = null
)
@Root(name = "list")
data class BookList(
@field:Element(name = "result", required = false)
@param:Element(name = "result", required = false)
val result: List<BookSearchResult>? = null,
)
data class BookSearchResult(
@field:Element(name = "author", required = false)
@param:Element(name = "author", required = false)
val author: String? = null,
@field:Element(name = "brief", required = false)
@param:Element(name = "brief", required = false)
val briefSynopsis: String? = null,
)
Run Code Online (Sandbox Code Playgroud)
但我收到改造 SimpleXML 的错误org.simpleframework.xml.core.ElementException: Element 'result[1]/author[1]' does not have a match in class BookList
经过这么多的发现和尝试和错误,我得到了解决方案。
我刚刚对块下方的数组列表元素进行了更改,
@Root(name = "list")
data class BookList(
@field:ElementList(inline = true, required = false)
@param:ElementList(inline = true, required = false)
val result: List<BookSearchResult>? = null,
)
Run Code Online (Sandbox Code Playgroud)
完整的解决方案代码如下。
data class CategoryResponseModel(
@field:Element(name = "api-version", required = false)
@param:Element(name = "api-version", required = false)
val apiVersion: String? = null,
@field:Element(name = "books", required = false)
@param:Element(name = "books", required = false)
val books: Books? = null
)
data class Books(
@field:Element(name = "list", required = false)
@param:Element(name = "list", required = false)
val list: BookList? = null
)
@Root(name = "list")
data class BookList(
@field:ElementList(inline = true, required = false)
@param:ElementList(inline = true, required = false)
val result: List<BookSearchResult>? = null,
)
data class BookSearchResult(
@field:Element(name = "author", required = false)
@param:Element(name = "author", required = false)
val author: String? = null,
@field:Element(name = "brief", required = false)
@param:Element(name = "brief", required = false)
val briefSynopsis: String? = null,
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
381 次 |
| 最近记录: |