我想将以下xml响应序列化为一个List<String>
对象:
<result>
<a1/>
<a2/>
...
<a20/>
</result>
像:
public class Result {
//should contain a1... a20
private List<String> list;
}
这可能吗?
背景:我无法控制的网络服务在XML响应中提供了几个“列表”。但是在这些列表中,侦听器以索引命名,如a20
。我不希望jaxb为此生成类似20个bean的属性。
答案 0 :(得分:1)
不能直接作为java.lang.String
。然而,像下面的一些转换可以做到这一点。
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"any"
})
@XmlRootElement(name = "result")
public class Result {
@XmlAnyElement(lax = true)
public List<Object> any;
public List<Object> getAny() {
if (any == null) {
any = new ArrayList<Object>();
}
return this.any;
}
}
解析代码:
Result rs = (Result) JAXBUtils.generateObjects(...) // unmarshalling code.
for(Object s : result.getAny()) {
System.out.println("response: " + ((ElementNSImpl)s).getTextContent());
}
示例:
sample.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<result>
<a1>one</a1>
<a2>two</a2>
<a20>three</a20>
</result>
<强>输出:强>
response: one
response: two
response: three