我有一个带有2个命名空间的xml元素,但无法通过jackson读取它们。

<Person xmlns="http://some.namespace.com" xmlns:ns0="http://some.other.namespace.com"> 
    <name>John</name> 
</Person> 
internal data class Person( 
    val name: String, 
    @get:JacksonXmlProperty(isAttribute = true) 
    val xmlns: String, 
    @get:JacksonXmlProperty(isAttribute = true, localName="xmlns:ns0") 
    val ns0: String 
) 

当使用jackson读取XML时,我收到一条错误消息,说两个 namespace 都应该可以为空。

我已经尝试过在类的主体中使用attrs等一些变体,并在 namespace 属性中尝试过,例如
    @JacksonXmlProperty(isAttribute = true, localName = "ns0", namespace = "xmlns") 
    var ns0: String? = null 

这是我正在使用的映射器
val mapper: XmlMapper = XmlMapper().apply { 
        registerModule(KotlinModule()) 
        setSerializationInclusion(JsonInclude.Include.NON_NULL) 
    } 

如何再次读写该xml,并使它们相同?

请您参考如下方法:

XML参数xmlns="...."xmlns:prefix="...."是XML namespace 定义。它们不是XML属性,
即使他们看起来像这样

因此,您不能定义与这些属性相对应的POJO属性。
而是使用 namespace @JacksonXmlProperty参数。
因此,您的Person类将如下所示:

internal data class Person( 
    @get: JacksonXmlProperty(isAttribute=true, localName="name", namespace="http://some.namespace.com") 
    val name: String 
) 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!