首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法使用JAXB和Kotlin解除xml对象集合的编组。

无法使用JAXB和Kotlin解除xml对象集合的编组。
EN

Stack Overflow用户
提问于 2017-07-29 19:10:37
回答 1查看 1.2K关注 0票数 0

我正在尝试反序列化/解组XML,其中包含包装在People标记中的Person元素的集合。我试图使用JAXB在Kotlin中反序列化这个XML。所有的编译和运行都没有错误,但是我的类中的人员集合始终是空的。我该如何解封这批藏品?

代码语言:javascript
运行
复制
import java.io.StringReader
import javax.xml.bind.JAXB
import javax.xml.bind.annotation.XmlAccessType
import javax.xml.bind.annotation.XmlAccessorType
import javax.xml.bind.annotation.XmlElement
import javax.xml.bind.annotation.XmlElementWrapper

@XmlAccessorType(XmlAccessType.FIELD)
data class Person(
        var name:String = "",
        var age:Int = 0
)

@XmlAccessorType(XmlAccessType.FIELD)
data class Report(
        var statusCode:Int = 0,
        @XmlElementWrapper(name = "people")
        @XmlElement(name = "person")
        var people:List<Person>? = null
)

val xml = """
<report>
    <statusCode>3</statusCode>
    <people>
        <person>
            <name>Bob</name>
            <age>30</age>
        </person>
        <person>
            <name>Alice</name>
            <age>40</age>
        </person>
    </people>
</report>
"""

fun main(args: Array<String>) {
    val report = JAXB.unmarshal(StringReader(xml), Report::class.java)
    println(report) // Report(statusCode=3, people=[])
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-29 19:24:40

这是因为您将XmlAccessType定义为FIELD,因此应该使用立地目标在后台field上进行注释,例如:

代码语言:javascript
运行
复制
// v--- annotated on field rather than getter/setter/params
@field:[XmlElementWrapper(name = "people") XmlElement(name = "person")]
var people: List<Person>? = null
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45393092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档