将 XML 转换为 Java/Groovy 中的 Object[]
Converting XML to Object[] in Java/Groovy
我有 XML 是这样的:
<jobs>
<no>2</no>
<job>
<status>Completed</status>
</job>
<job>
<status>In Progress</status>
</job>
</jobs>
我试过这个:
def xmlmapper = new XmlMapper()
def obj = xmlmapper.readValue(xml, Object[].class)
然后我获取 obj 并遍历它,但似乎一切都是字符串,我希望 "no" 是 int。
我的问题是,有什么方法可以使用 Jackson Mapper 类 来获取整数吗?
我认为,如果我首先使用标准 json 库将 XML 转换为 JSON,然后将 JSON 转换为 Object,那将包含整数。
杰克逊应该做同样的事情,首先转换为 json,但是 xmlmapper 的行为似乎有所不同,所以我不确定我在这里真正缺少什么......
您可以使用 class 映射到所需字段属于所需类型的位置。例如。 (参见 XXX
)
@Grab('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.5.1')
import groovy.transform.ToString
import com.fasterxml.jackson.dataformat.xml.XmlMapper
import com.fasterxml.jackson.dataformat.xml.annotation.*
@ToString
class Jobs {
Integer no // XXX
@ToString
static class Job {
String status
}
@JacksonXmlElementWrapper(useWrapping=false)
List<Job> job
}
def xml="""<jobs><no>2</no><job><status>Completed</status></job><job><status>In Progress</status></job></jobs>"""
def xmlmapper = new XmlMapper()
def jobs = xmlmapper.readValue(xml, Jobs)
assert jobs.no==2
assert jobs.job.size()==jobs.no
assert jobs.toString()=='Jobs(2, [Jobs$Job(Completed), Jobs$Job(In Progress)])'
我有 XML 是这样的:
<jobs>
<no>2</no>
<job>
<status>Completed</status>
</job>
<job>
<status>In Progress</status>
</job>
</jobs>
我试过这个:
def xmlmapper = new XmlMapper()
def obj = xmlmapper.readValue(xml, Object[].class)
然后我获取 obj 并遍历它,但似乎一切都是字符串,我希望 "no" 是 int。
我的问题是,有什么方法可以使用 Jackson Mapper 类 来获取整数吗? 我认为,如果我首先使用标准 json 库将 XML 转换为 JSON,然后将 JSON 转换为 Object,那将包含整数。 杰克逊应该做同样的事情,首先转换为 json,但是 xmlmapper 的行为似乎有所不同,所以我不确定我在这里真正缺少什么......
您可以使用 class 映射到所需字段属于所需类型的位置。例如。 (参见 XXX
)
@Grab('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.5.1')
import groovy.transform.ToString
import com.fasterxml.jackson.dataformat.xml.XmlMapper
import com.fasterxml.jackson.dataformat.xml.annotation.*
@ToString
class Jobs {
Integer no // XXX
@ToString
static class Job {
String status
}
@JacksonXmlElementWrapper(useWrapping=false)
List<Job> job
}
def xml="""<jobs><no>2</no><job><status>Completed</status></job><job><status>In Progress</status></job></jobs>"""
def xmlmapper = new XmlMapper()
def jobs = xmlmapper.readValue(xml, Jobs)
assert jobs.no==2
assert jobs.job.size()==jobs.no
assert jobs.toString()=='Jobs(2, [Jobs$Job(Completed), Jobs$Job(In Progress)])'