Map和xml格式数据互转
public static String map2xml(Map<String, Object> map) throws Exception {
Iterator<Map.Entry<String, Object>> entries = map.entrySet().iterator();
if(entries.hasNext()){
Map.Entry<String, Object> entry = entries.next();
Document doc = DocumentHelper.createDocument();
Element root = DocumentHelper.createElement(entry.getKey());
doc.add(root);
map2xml((Map)entry.getValue(), root);
String formatXml = formatXml(doc);
return formatXml;
}
return null;
}
private static Element map2xml(Map<String, Object> map, Element body) {
Iterator<Map.Entry<String, Object>> entries = map.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry<String, Object> entry = entries.next();
String key = entry.getKey();
Object value = entry.getValue();
if(key.startsWith("@")){
body.addAttribute(key.substring(1, key.length()), value.toString());
} else if(key.equals("#text")){
body.setText(value.toString());
} else {
if(value instanceof java.util.List ){
List list = (List)value;
Object obj;
for(int i=0; i<list.size(); i++){
obj = list.get(i);
if(obj instanceof java.util.Map){
Element subElement = body.addElement(key);
map2xml((Map)list.get(i), subElement);
} else {
body.addElement(key).setText((String)list.get(i));
}
}
} else if(value instanceof java.util.Map ){
Element subElement = body.addElement(key);
map2xml((Map)value, subElement);
} else {
body.addElement(key).setText(value.toString());
}
}
}
return body;
}
public static String formatXml(Document document) throws Exception {
OutputFormat format = OutputFormat.createPrettyPrint();
StringWriter writer = new StringWriter();
XMLWriter xmlWriter = new XMLWriter(writer, format);
xmlWriter.write(document);
xmlWriter.close();
return writer.toString();
}
public static List<Map<String, Object>> xmlStringToMap(String xml){
List<Map<String, Object>> rslist=new ArrayList<Map<String, Object>>();
try {
Document doc = DocumentHelper.parseText(xml);
Element rootElt = doc.getRootElement();
List<Element> list=rootElt.elements();
if(list!=null&&!list.isEmpty()){
Map<String, Object> resultMap =null;
for(Element element:list){
resultMap = new HashMap<String, Object>();
Iterator itersElIterator = element.elementIterator();
while(itersElIterator.hasNext()){
Element itemEle = (Element) itersElIterator.next();
if(StringUtils.isNotBlank(itemEle.getName())){
resultMap.put(itemEle.getName(), itemEle.getTextTrim());
}
}
rslist.add(resultMap);
}
}
} catch (Exception e) {
LOG.error("解析xml字符串失败",e);
}
return rslist;
}
StringUtils工具包的依赖
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)