- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 kotlin 中的 simplexml 解析 rss 提要。
提要是 top podcasts feed from itunes
返回的数据具有以下结构:
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Top Audio Podcasts</title>
<link>https://rss.itunes.apple.com/api/v1/us/podcasts/top-podcasts/all/10/explicit.rss</link>
<lastBuildDate>Fri, 13 Jul 2018 01:36:19 -0700</lastBuildDate>
<atom:link rel="self" type="application/rss+xml" href="https://rss.itunes.apple.com/api/v1/us/podcasts/top-podcasts/all/10/explicit.rss"/>
<atom:link rel="alternate" type="text/html" href="https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewTop?genreId=26&popId=28"/>
<description>iTunes Store : Top Audio Podcasts</description>
<category>iTunes Store</category>
<copyright>Copyright © 2018 Apple Inc. All rights reserved.</copyright>
<item>
<title>The Wilderness - Crooked Media</title>
<category domain="">Crooked Media</category>
<link>https://itunes.apple.com/us/podcast/the-wilderness/id1408796715?mt=2</link>
<guid>https://itunes.apple.com/us/podcast/the-wilderness/id1408796715?mt=2</guid>
<description>The Wilderness</description>
<category>podcast</category>
<category>News & Politics</category>
<category>Podcasts</category>
<category>Society & Culture</category>
<category>History</category>
<pubDate>Fri, 6 Jul 2018 00:00:00 +0000</pubDate>
</item>
<item>
<title>Aaron Mahnke's Cabinet of Curiosities - HowStuffWorks & Aaron Mahnke</title>
<category domain="https://itunes.apple.com/us/artist/howstuffworks-aaron-mahnke/284341002?mt=2">HowStuffWorks & Aaron Mahnke</category>
<link>https://itunes.apple.com/us/podcast/aaron-mahnkes-cabinet-of-curiosities/id1396546917?mt=2</link>
<guid>https://itunes.apple.com/us/podcast/aaron-mahnkes-cabinet-of-curiosities/id1396546917?mt=2</guid>
<description>Aaron Mahnke's Cabinet of Curiosities</description>
<category>podcast</category>
<category>History</category>
<category>Podcasts</category>
<category>Society & Culture</category>
<pubDate>Tue, 10 Jul 2018 00:00:00 +0000</pubDate>
</item>
</channel>
</rss>
我关心的部分是项目标签包含的播客列表。
我的模型类是这样的:
@Root(name = "channel", strict = false)
data class Chart @JvmOverloads constructor(
@field:ElementList(entry = "item", inline = true)
@param:ElementList(entry = "item", inline = true)
val podcasts: List<Entry>? = null)
@Root(name = "item", strict = false)
data class Entry @JvmOverloads constructor(
@field:Element(name = "description")
@param:Element(name = "description")
val title: String? = null,
@field:Element(name = "category")
@param:Element(name = "category")
val artist: String? = null,
@field:Element(name = "guid")
@param:Element(name = "guid")
val guid: String? = null)
我有一个简单的单元测试,它从文件加载 xml,将其传递给 simplexml 反序列化器,然后将输出与某些预期模型进行比较。
在我运行测试时出现异常:
org.simpleframework.xml.core.ValueRequiredException: Unable to satisfy @org.simpleframework.xml.ElementList(entry=item, inline=true, data=false, name=, type=void, required=true, empty=true) on field 'podcasts' private final java.util.List Chart.podcasts for class Chart at line 2
将 required = false 添加到 @ElementList 注释可消除此错误,但反序列化器会为列表返回 null。
我最好的猜测是反序列化器无法找到项目列表,尽管根据我对@ElementList 的理解,使用输入字段应该允许它找到标签。
此代码的用例是形成依赖 Retrofit2 进行 REST 调用的 Android 应用的网络层。
感谢您对此提供的任何帮助。
注意:@Param 和@Field 声明的使用是为了对抗不同的异常,I got the idea from this question
最佳答案
我找到了解决方案。
所以第一个问题是我的根元素不是代表 channel 标签的图表,我需要一个包装类,我称之为 ChartFeed 来代表 rss 标签。
我通过在同样无法找到的图表对象上为标题标签添加一个元素来实现这一点。
我完成的数据类如下所示:
@Root(name = "rss", strict = false)
data class ChartFeed(
@field:Element(name = "channel")
@param:Element(name = "channel")
val chart: Chart? = null)
@Root(name = "channel", strict = false)
data class Chart @JvmOverloads constructor(
@field:ElementList(entry = "item", inline = true)
@param:ElementList(entry = "item", inline = true)
val podcasts: List<Entry>? = null)
@Root(name = "item", strict = false)
data class Entry @JvmOverloads constructor(
@field:Path("description")
@field:Text(required = false)
@param:Path("description")
@param:Text(required = false)
val title: String? = null,
@field:Path("category")
@field:Text(required = false)
@param:Path("category")
@param:Text(required = false)
val artist: String? = null,
@field:Element(name = "guid")
@param:Element(name = "guid")
val guid: String? = null)
我已经将一些字段/参数的@Element 标记更改为@Path 和@Text 的组合,这是因为 channel 和项目 xml 对象重用了导致此异常的相同标记:
org.simpleframework.xml.core.PersistenceException: Element 'category' is already used with @org.simpleframework.xml.Element(name=category, type=void, data=false, required=true) on field 'artist' private final java.lang.String Entry.artist at line 18
我用的方案很详细here
关于android - Kotlin - 使用 simpleXML 解析 xml 内联列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51336777/
我正在查看Kotlin Github page我注意到 Kotlin 语言本身大部分是用 Kotlin 编写的:我只是想知道,一种语言怎么可能大部分都是用它自己的语言编写的?在您可以使用正在创建的语言
我有以下非常简单的 kotlin 代码来演示中缀函数 com.lopushen.demo.presentation 包 fun main(args: Array) { print("Hello
我在 Java 中有 2 个模型类,其中一个扩展了另一个 @UseStag public class GenericMessages extends NavigationLocalizationMap
Kotlin 代码 runBlocking { flow { for (i in 0..4) { println("Emit $i")
这三个 Kotlin 插件和它们的实际作用有什么区别? plugins { id 'kotlin-android' id 'org.jetbrains.kotlin.android'
我正在为某些现有库添加 Kotlin 原生 linuxX64 目标支持。库已成功编译,但在运行测试用例时,出现以下运行时错误: kotlin.native.concurrent.InvalidMuta
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 2 年前。 Improve t
我创建了一个类并向其添加了一个与成员函数具有相同签名的扩展,并执行了这个方法,它总是执行成员方法。 class Worker { fun work() = "...working" } fun
我知道传递给函数的参数将被视为“val”,即使变量被初始化为“var”。但这对我来说一直是个问题。在下面的示例代码中,我想通过使用函数“changeNum”修改变量“num”的值。但当然,Kotlin
现在,我正在尝试用 Kotlin 重写我的 Java 应用程序。然后,我遇到了日志语句,比如 log.info("do the print thing for {}", arg); 所以我有两种方法可
有点出名article关于许多语言的异步编程模型的状态,指出它们存在“颜色”问题,特别是将生态系统分为两个独立的世界:异步和非异步。以下是这种语言的属性: 每个函数都有一种颜色,红色或蓝色(例如asy
因为 KDoc 文档生成引擎是 abandoned in favor of Dokka , Kotlin 文档应该称为“KDoc 注释”,还是“Dokka 注释”? 最佳答案 如所述here , KD
我想在可空对象上传递函数引用。以 Android 为例,假设我想使用 Activity#onBackPressed来自作为该事件的子级的片段。 如果我想调用这个函数,我可以很容易地做到 activit
我有一个列表 (x, y)其中y只能是 0 或 1 这样 例如: [(3, 0), (3, 1), (5, 1)] [(5, 0), (3, 1), (5, 1)] [(1, 1), (3, 1),
从强类型语言的定义来看: A strongly-typed programming language is one in which each type of data (such as intege
这不能编译的事实是否意味着它们不是一流的类型? fun foo(s: String): Int = s.length // This won't compile. val bar = foo 有没有办
如果在 Java i++是一个表达式和 i++;是一个表达式语句,分号(;) 在 Kotlin 中是可选的,是 i++ Kotlin 中的表达式或表达式语句? 最佳答案 i++是一个表达式,因为它有一
代码(如下所示)是否正确?它取自 Kotlin-docs.pdf 的第 63 页,这也是 https://kotlinlang.org/docs/reference/generics.html 的最后
我正在尝试使用 Kotlin 为 Android 的一些全局 API 解析器(检查网络连接、调用 API 并通过来自源的单个调用返回格式化数据),并且在某些时候我不得不创建一个通用类型 object就
kotlinlang 中的任务: 使用月份变量重写此模式,使其与格式 13 JUN 1992(两位数字、一个空格、一个月份缩写、一个空格、四位数字)中的日期相匹配。 答案是:val month = "
我是一名优秀的程序员,十分优秀!