java的map格式数据转xml

本文提供了一个将复杂嵌套的Map数据结构转换成XML格式的Java实现案例,包括处理Map中嵌套Map和List的情况,并展示了如何美化输出的XML。

关于map数据格式转换为xml格式

map的大致数据为:map<String,Object> Object里面可以继续嵌套list,list里面继续放map如此.

@SuppressWarnings("unchecked")
public Element GetXMLFromMap(Element root, Map<String, Object> map){
for (Entry<String, Object> entry : map.entrySet()) {
if (!(entry.getValue() instanceof HashMap || entry.getValue() instanceof ArrayList)) {
Element elementOne = root.addElement(entry.getKey());
elementOne.setText(String.valueOf(entry.getValue()));
} else if (entry.getValue() instanceof HashMap) {
Element elementTwo = root.addElement(entry.getKey());
list2Xml(elementTwo, (Map<String, Object>) entry.getValue());
} else {
List<Map<String, Object>> list = (List<Map<String, Object>>) entry.getValue();
Element elementThr = root.addElement(entry.getKey());
for (Map<String, Object> listMap : list) {
list2Xml(elementThr, (Map<String, Object>) listMap);
}
}
}
return root;

/*
 * 输出去的xml格式化
 */
public static String formatXML(String str) throws Exception {    
       SAXReader reader=new SAXReader();  
       //创建一个串的字符输入流  
       StringReader in=new StringReader(str);  
       Document doc=reader.read(in);  
      // 创建输出格式  
       OutputFormat formater=OutputFormat.createPrettyPrint();  
       //去掉xml文件的版本信息  
       formater.setSuppressDeclaration(true);
       //设置xml的输出编码  
       formater.setEncoding("UTF-8");  
       //创建输出(目标)  
       StringWriter out=new StringWriter();  
      //创建输出流  
       XMLWriter writer=new XMLWriter(out,formater);  
        //输出格式化的串到目标中,执行后。格式化后的串保存在out中。  
       writer.write(doc);  
       writer.close();  
      //返回我们格式化后的结果  
       return out.toString();       
   }  



测试:

public static void main(String[] args) {
 Map<String, Object> map = new HashMap<String, Object>();
 
 Map<String, Object> orderDetaila = new HashMap<String, Object>();
 Map<String, Object> orderDetailb = new HashMap<String, Object>();
 
 List<Map<String, Object>> list=new ArrayList<Map<String, Object>>();
 orderDetaila.put("id", "订单1");
 orderDetaila.put("code","订单1code");
 List<Map<String, Object>> lista=new ArrayList<Map<String, Object>>();
 Map<String, Object> Detaila = new HashMap<String, Object>();
 Map<String, Object> Detailb = new HashMap<String, Object>();
 Detaila.put("id", "订单1_订单详细1");
 Detaila.put("code","订单1_订单详细1code");
 Detailb.put("id", "订单2_订单详细1");
 Detailb.put("code","订单2_订单详细1code");
 lista.add(Detaila);
 lista.add(Detailb);
 orderDetaila.put("orderDeatil", lista);
 
 orderDetailb.put("id", "订单2");
 orderDetailb.put("code","订单2code");
 List<Map<String, Object>> listb=new ArrayList<Map<String, Object>>();
 Map<String, Object> Detailc = new HashMap<String, Object>();
 Map<String, Object> Detaild = new HashMap<String, Object>();
 Detailc.put("id", "订单2_订单详细1");
 Detailc.put("code","订单2_订单详细1code");
 Detaild.put("id", "订单2_订单详细2");
 Detaild.put("code","订单2_订单详细2code");
 listb.add(Detailc);
 listb.add(Detaild);
 orderDetailb.put("orderDeatil", listb);
 
 list.add(orderDetailb);
 list.add(orderDetaila);
 
 map.put("name", "张三");
 map.put("age", 23);
 map.put("address", "广州天河区");
 
 map.put("order", list);
 
 Map<String, Object> mapee = new HashMap<String, Object>();
 mapee.put("city_name", "北京");
 mapee.put("phone","027-12345678");
 
 map.put("consignee", mapee);
 
 Document document = DocumentHelper.createDocument();
 Element root = null;
 root = document.addElement("orders");
 root=GetXMLFromMap(root,map);

          String memberXmlText=root.asXML();
          try {
memberXmlText=formatXML(memberXmlText);
} catch (Exception e) {
e.printStackTrace();
}
         // memberXmlText = JsonBinder.buildNormalBinder().toJson(memberXmlText);
 System.out.println(memberXmlText);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值