List<Map>与XML之间的转换

公司要使用XML传入数据,需要将List<Map>结构的数据转换为XML。
实现方法已经完成,贴出来备忘。
1.XML的根节点的建立
/**
* 类转xml方法.
* @param data List<?>
* @return String
* @throws
*/
public String map2xml(Map map) {
Document document = DocumentHelper.createDocument();
Element nodesElement = document.addElement("ROOT");
map2xml(map,nodesElement);
return doc2String(document);
}

/**
* 类转xml方法.
* @param data List<?>
* @return String
* @throws
*/
public String list2xml(List<?> list) {
Document document = DocumentHelper.createDocument();
Element nodesElement = document.addElement("DATA");
list2xml(list,nodesElement);
return doc2String(document);
}

2.XML转String 用dom4j的功能实现
/**
* xml转为String.
* @param document
* @return
* @throws
*/
public String doc2String(Document document) {
String s = "";
try {
// 使用输出流来进行转化
ByteArrayOutputStream out = new ByteArrayOutputStream();
// 使用UTF-8编码
OutputFormat format = new OutputFormat(" ", true, "UTF-8");
XMLWriter writer = new XMLWriter(out, format);
writer.write(document);
s = out.toString("UTF-8");
} catch (Exception ex) {
ex.printStackTrace();
}
return s;
}
3.List2XML方法实现
/**
* List2XML,目前支持List<List> List<Map> List<Map<String,List>>等只有
* List Map 组合的数据进行转换.
* @param list
* @param element
* @return
* @throws
*/
public Element list2xml(List list,Element element){
int i = 0;
for (Object o : list) {
Element nodeElement = element.addElement("LIST");
if (o instanceof Map) {
nodeElement.addAttribute("type", "o");
Map m = (Map) o;
for (Iterator iterator = m.entrySet().iterator(); iterator.hasNext();) {
Entry entry = (Entry) iterator.next();
Element keyElement = nodeElement.addElement(entry.getKey().toString());
if (entry.getValue() instanceof List) {
keyElement.addAttribute("type", "l");
list2xml((List) entry.getValue(),keyElement);
} else {
keyElement.addAttribute("type", "s");
keyElement.setText(entry.getValue().toString());
}
}
} else if (o instanceof List) {
nodeElement.addAttribute("type", "l");
list2xml((List)o,nodeElement);
}
else {
Element keyElement = nodeElement.addElement("value");
keyElement.addAttribute("num", String.valueOf(i));
keyElement.setText(String.valueOf(o));
}
i++;
}
return element;
}

4.xml2List
/**
* xml转List方法.
* @param xml
* @return List<?>
* @throws
*/
public List<?> xml2List(String xml){
try {
List list = new ArrayList();
Document document = DocumentHelper.parseText(xml);
Element nodesElement = document.getRootElement();
List nodes = nodesElement.elements();
for (Iterator its = nodes.iterator(); its.hasNext();) {
Element nodeElement = (Element) its.next();
if(("l").equals(nodeElement.attributeValue("type"))){
List s = xml2List(nodeElement.asXML());
list.add(s);
s = null;
}else if(("o").equals(nodeElement.attributeValue("type"))){
Map map = xml2Map(nodeElement.asXML());
list.add(map);
map = null;
}else{
list.add(nodeElement.getText());
}
}
nodes = null;
nodesElement = null;
document = null;
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
5.XML2MAP
/**
* xml 2 map
* @param xml
* @return
*/
public Map xml2Map(String xml) {
try {
Map map = new HashMap();
Document document = DocumentHelper.parseText(xml);
Element nodeElement = document.getRootElement();
List node = nodeElement.elements();
for (Iterator it = node.iterator(); it.hasNext();) {
Element elm = (Element) it.next();
if("l".equals(elm.attributeValue("type"))){
map.put(elm.getName(), xml2List(elm.asXML()));
}else if("o".equals(elm.attributeValue("type"))){
map.put(elm.getName(), xml2Map(elm.asXML()));
}else{
map.put(elm.getName(), elm.getText());
}
elm = null;
}
node = null;
nodeElement = null;
document = null;
return map;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值