我有一个带有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时,我收到一条错误消息,指出两个名称空间都应该可以为空。
我已经尝试过在类的主体中使用attrs之类的变体,并在名称空间属性中尝试过
@JacksonXmlProperty(isAttribute = true, localName = "ns0", namespace = "xmlns")
var ns0: String? = null
这是我正在使用的映射器
val mapper: XmlMapper = XmlMapper().apply {
registerModule(KotlinModule())
setSerializationInclusion(JsonInclude.Include.NON_NULL)
}
我如何再次读写该xml,并使它们相同?
答案 0 :(得分:0)
XML参数xmlns="...."
和xmlns:prefix="...."
是XML名称空间定义。它们不是XML属性,
即使他们看起来像这样。
因此,您不得定义与这些属性相对应的POJO属性。
而是使用@JacksonXmlProperty
的namespace
参数。
因此,您的Person
类将看起来像这样:
internal data class Person(
@get: JacksonXmlProperty(isAttribute=true, localName="name", namespace="http://some.namespace.com")
val name: String
)
答案 1 :(得分:0)
我解决了这样的问题,将属性设置为XMLInputFactory就像这样:
JSON Object
在这种情况下,您可以对所有名称空间建模并执行所需的操作。 案件解决了。