首页 > 解决方案 > XML - SimpleFramework 解析为 Kotlin/JAVA

问题描述

我正在尝试将 xml 数据解析为 Kotlin/Java,但无法弄清楚如何正确执行。简单框架抛出

org.simpleframework.xml.core.PersistenceException:构造函数与类 openaire.model.Publication 不匹配

这并没有真正帮助。

XML:

<response>
    <header>
        <size>60</size>
        <page>1</page>
        <total>116600160</total>
    </header>
    <publications>
        <publication>
            <openaireid>od______1318::206c086e81631b3cde0eca4acb2d0ea2</openaireid>
            <doi>10.22337/1524-5845-2016-12-3-104-113</doi>
            <doi>10.22337/1524-5845-2016-12-3-104-113</doi>
            <description>Peer reviewed</description>
            <publicationtype>Article</publicationtype>
            <title>Neuroleptiques à uridol (R16341)</title>
            <authors>
                <author>Bobon, Jean</author>
                <author>Mélon, Jean</author>
            </authors>
            <dateofacceptance>1970-01-01</dateofacceptance>
            <sourcejournal>Crossref</sourcejournal>
            <sourcejournal>Neuroleptiques</sourcejournal>
            <webresource>http://ijccse.iasv.ru/</webresource>
            <webresource>https://academic.microsoft.com</webresource>
            <bestlicense>OPEN</bestlicense>
        </publication> 
.....
    </publications>
</response>

Kotlin Class:我认为错误可能出在元素列表 doi、来源期刊或网络资源中。

@Root(name = "response", strict = false)
class OpenaireModel @JvmOverloads constructor(
    var header: Header,

    @field:Element(name = "publications")
    var publications: Publications,
)

@Root(name = "header", strict = false)
class Header @JvmOverloads constructor(
    @field:Element(name = "size")
    var size: Int,
    @field:Element(name = "page")
    var page: Int,
    @field:Element(name = "total")
    var total: Int
)

@Root(name = "authors", strict = false)
class Authors @JvmOverloads constructor(
    @field:ElementList(inline = true, required = false)
    var author: List<String> = mutableListOf()
)

@Root(name = "publication", strict = false)
class Publication @JvmOverloads constructor(
    @field:Element(name = "openaireid")
    var openaireid: String? = null,

    @field:ElementList(
        required = false,
        name = "doi",
        entry = "doi",
        inline = true,
        empty = true
    )
    var dois: List<Doi>? = null,

    @field:Element(name = "description", required = false)
    var description: String? = null,

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

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

    @field:Element(name = "authors")
    var authors: Authors,

    @field:ElementList(
        required = false,
        name = "sourcejournal",
        entry = "sourcejournal",
        inline = true,
        empty = true
    )
    var sources: List<Sourcejournal>? = null,

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

    @field:ElementList(
        required = false,
        name = "webresource",
        entry = "webresource",
        inline = true,
        empty = true
    )
    var resources: List<Webresource>? = null,

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

@Root(name = "webresource", strict = false)
class Webresource @JvmOverloads constructor(
    @field:Text
    var text: String? = null
)

@Root(name = "sourcejournal", strict = false)
class Sourcejournal @JvmOverloads constructor(
    @field:Text
    var text: String? = null
)

@Root(name = "doi", strict = false)
class Doi @JvmOverloads constructor(
    @field:Text
    var text: String? = null
)


@Root(name = "publications", strict = false)
class Publications @JvmOverloads constructor(
    @field:ElementList(inline = true)
    var publication: List<Publication>
)

标签: javaxmlkotlinsimple-framework

解决方案


推荐阅读