当前位置: 首页 > 知识库问答 >
问题:

Kotlin 1.2.21 SimpleXml 2.3.0 -消费列表错误(必须标记set get方法)

佟涵畅
2023-03-14

我正在尝试使用Transformition 2的SimpleXML使用XML。经过几个小时的Kotlin斗争,我决定尝试Java版本,然后转换为Kotlin。Java版本运行良好...

错误:

java.lang.RuntimeException: org.simpleframework.xml.core.MethodException: Annotation @org.simpleframework.xml.ElementList(data=false, empty=true, entry=, inline=true, name=entry, required=true, type=void) must mark a set or get method

我需要一个能够使用XML的Kotlin模型类。输入如下:

<feed>
   <entry>
        <id> someid </id>
        <published> somedate </published>
   </entry>

   <entry>
        <id> someid2 </id>
        <published> somedate2 </published>
   </entry>
</feed>

Java模型类版本(工作正常):

@Root(name = "feed", strict = false)
public class MFeed {
    @ElementList(name = "entry", inline = true)
    private List<MEntry> entriesList;

    public MFeed(List<MEntry> entriesList) {
        this.entriesList = entriesList;
    }

    public MFeed() {
    }

    public List<MEntry> getEntriesList() {
        return entriesList;
    }

    public void setEntriesList(List<MEntry> entriesList) {
    this.entriesList = entriesList;
    }
}

@Root(name = "entry", strict = false)
public class MEntry {

    @Element(name = "id")
    private String id;

    @Element(name = "published")
    private String published;

    public MEntry() {
    }

    public MEntry(String id, String published) {
        this.id = id;
        this.published = published;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getPublished() {
        return published;
    }

    public void setPublished(String published) {
        this.published = published;
    }
}

自动生成的静态编程语言模型如下所示:

@Root(name = "feed", strict = false)
class Feed {
    @ElementList(name = "entry", inline = true)
    private var entriesList: List<MEntry>? = null

    //autogenerated by converter java -> kotlin
    constructor(entriesList: List<MEntry>) {
        this.entriesList = entriesList
    }

    //autogenerated by converter java -> kotlin
    constructor() {}
}

@Root(name = "entry", strict = false)
class Entry {
    @Element(name = "id")
    var id: String? = null

    @Element(name = "published")
    var published: String? = null

    //autogenerated by converter java -> kotlin
    constructor() {}

    //autogenerated by converter java -> kotlin
    constructor(id: String, published: String) {
        this.id = id
        this.published = published
    }
}

我为使用XML列表提供了很多服务,包括这篇文章、这篇文章和这篇文章。没有一个有效。也许它们已经过时了。有人面临这样的问题吗?

共有1个答案

董翰池
2023-03-14

尝试将@field添加到您的注释@Element*。您可以将属性移动到构造函数,也可以将data修饰符添加到您的类中。像这样:

@Root(name = "feed", strict = false)
data class Feed(
        @field:ElementList(name = "entry", inline = true)
        var entriesList: List<Entry>? = null
)

@Root(name = "entry", strict = true)
data class Entry(
        @field:Element(name = "id")
        var id: String? = null,

        @field:Element(name = "published")
        var published: String? = null
)

有了这个,我成功地反序列化了xml:

import org.simpleframework.xml.Element
import org.simpleframework.xml.ElementList
import org.simpleframework.xml.Root
import org.simpleframework.xml.core.Persister

private val testXml = """
<feed>
   <entry>
        <id> someid </id>
        <published> somedate </published>
   </entry>

   <entry>
        <id> someid2 </id>
        <published> somedate2 </published>
   </entry>
</feed>
""".trimIndent()

@Root(name = "feed", strict = false)
data class Feed(
        @field:ElementList(name = "entry", inline = true)
        var entriesList: List<Entry>? = null
)

@Root(name = "entry", strict = true)
data class Entry(
        @field:Element(name = "id")
        var id: String? = null,

        @field:Element(name = "published")
        var published: String? = null
)

fun main(args: Array<String>) {
    println(testXml)

    val serializer = Persister()

    val example = serializer.read(Feed::class.java, testXml)

    println(example)
}
 类似资料:
  • 问题内容: 我试图通过Retrofit 2使用SimpleXML来使用XML。在与Kotlin进行了数小时的挣扎之后,我决定尝试Java版本,然后再转换为Kotlin。Java版本运作良好… 错误: 我需要一个能够使用该XML的Kotlin模型类。输入如下: Java模型类版本(工作正常): 自动生成的Kotlin模型如下所示: 我为使用XML列表而付出了很多,包括this。没有工作。也许它们已经

  • 所以我一直有这个错误,我不知道发生了什么。我在谷歌上搜索了一下,读了一些关于这个错误的问题,但什么都没用。我只想运行它,这样我就可以完成我的项目。 错误:开始低库存;结束;*第1行错误:ORA-06550:第1行,第9列:PLS-00201:标识符“LOWINVENTORY”必须声明ORA-06550:第1行,第7列:PL/SQL:忽略语句 编辑: 表创建:

  • 我一上午都在尝试,但没有结果。我好像不知道我做错了什么。我已经检查了两个链接(在许多其他没有帮助的链接中),还没有解决我的问题。这是WebUserControl... 收到以下错误: 类型为“TextBox”的控件“HeadContent_CareersViewPosting_TXTFirstName”必须放置在RUNAT=Server的表单标记内。 已经尝试了这里,这里和这里的建议,但没有结果。

  • 问题内容: 有人在说我必须实施OnFragmentInteractionListener,这是一个错误,但是据我所知我正确地实现了它。任何帮助将不胜感激。 主要活动 导航片段 内容片段 错误 问题答案: 两者中的接口都包含一个具有相同签名的方法,并且正在实现一种方法来尝试覆盖这两个接口。 更改一个或两个方法的签名,然后在中实现两个方法。例如: 导航片段 内容片段 主要活动

  • 问题内容: 最近,我做了一个Netbeans项目,并且正在使用SVN。我看到重复的类错误,并且在控制台中显示 这是PieChartExplorer.java: 我努力了: 清理并重建项目 确保我在所有构造函数中都调用了super 如何解决?下载代码。 问题答案: 前几天我看到了这些症状。 我有我一直在编辑的文件,因此决定将更改分为2个提交。我进入了包含我的文件“ x / y / Z.java”的目

  • 我试图打印道具的反应组件,但得到一个错误。请帮助: 片段: 我在等“你好,亲爱的!”然后下一行是“蓝色”。但是,我得到了这个错误。 错误: