今天開發(fā)接口,遇到xml的格式比較特別大概格式為
<DBSET>
<R>
<C N="RECORD_ID">111111</C>
<C N="ORG_NO">2222</C>
</R>
<R>
<C N="RECORD_ID">333</C>
<C N="ORG_NO">4444</C>
</R>
</DBSET>
目前解決思路就是將R看做Map, C看做一個鍵值對。
<R>
<C N="RECORD_ID">111111</C>
<C N="ORG_NO">2222</C>
</R>
理解為
{
RECORD_ID: 111111,
ORG_NO: 2222
}
定義一個JavaBean用來描述<R/>
@XStreamAlias("R")
@XStreamConverter(ResultConverter.class)
public class Result {
public Map<String, Object> result = new HashMap<String, Object>();
public void put(String key, Object val){
result.put(key, val);
}
public void putAll(Map<String,Object> map) {
result.putAll(map);
}
public Object get(String key) {
return result.get(key);
}
}
Converter類
public class ResultConverter implements Converter {
@Override
public boolean canConvert(Class class_) {
return "com.zhbr.ws.inf.yx.ws.entity.yxhc2.Result".equals(class_.getName());
}
@Override
public void marshal(Object source, HierarchicalStreamWriter writer,
MarshallingContext context) {
Result r = (Result) source;
Map<String,Object> result = r.result;
if(result.isEmpty()) return;
for(Entry<String,Object> entry: result.entrySet()){
writer.startNode("C");
writer.addAttribute("N", entry.getKey());
writer.setValue( StrUtil.toStr(entry.getValue()));
writer.endNode();
}
}
@Override
public Object unmarshal(HierarchicalStreamReader reader,
UnmarshallingContext context) {
Result r = new Result();
while (reader.hasMoreChildren()) {
reader.moveDown();
if ("C".equals(reader.getNodeName())) {
String col = reader.getAttribute("N");
String val = reader.getValue();
r.put(col, val);
}
reader.moveUp();
}
return r;
}
}
測試
Result r = new Result();
r.put("RETURN_MSG", "xxx");
r.put("RETURN_FLAG", "0");
String xml = XmlUtil.toXml(r);
System.out.println(xml);
Result r2 = XmlUtil.toBean(xml, Result.class);
System.out.println(r2);
輸出
<R>
<C N="RETURN_MSG">xxx</C>
<C N="RETURN_FLAG">0</C>
</R>
RETURN_MSG: xxx,RETURN_FLAG: 0