Java解析XML字符串
后端需要接收一段xml字符串并解析,xml标签有重复,涉及到解析过后不能用map存入,网上找了好多解析方式并不是我想要的(大部分都是用map存储),于是看着网上解析的思路,写了一套可以保存重复标签以及其他标签的方法。
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.jfinal.plugin.activerecord.Record;
import org.dom4j.*;
import org.dom4j.io.SAXReader;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.*;
/**
* 解析xml文件
* @param xml
* @param map
* @param list
* @return
*/
public static List parseXml2Map(String xml, Map<String, String> map, List<String> list) {
Map<String, String> mapEnd = new HashMap<String, String>();
try {
SAXReader reader = new SAXReader();
Document doc = reader.read(new StringReader(xml));
Element root = doc.getRootElement();
String path = "";
if (map.containsKey(root.getName().trim())) {
path = map.get(root.getName().trim());
map.remove(root.getName().trim());
}
for (Iterator i = root.elementIterator(); i.hasNext(); ) {
Element element = (Element) i.next();
if (element.isTextOnly()) {
if (path.length() > 0) {
String a = path + element.getName().trim();
if (a.contains("coordinates")) { //引号里面为重复的标签
list.add(element.getTextTrim());
// mapEnd.put(num+"", element.getTextTrim());
}
map.put(path + element.getName().trim(), element.getTextTrim());
} else {
String a = element.getName().trim();
if (a.contains("coordinates")) {//引号里面为重复的标签
list.add(element.getTextTrim());
//mapEnd.put(num+"", element.getTextTrim());
}
map.put(element.getName().trim(), element.getTextTrim());
}
} else {
map.put(element.getName().trim(), path + element.getName().trim() + ".");
parseXml2Map(element.asXML(), map, list);
}
}
} catch (Exception e) {
e.printStackTrace();
}//
return list;
}
PS:
参数里的Map和List 都是解析后存入的载体,重复标签存入List,不重复的标签存入Map,根据不同的需求来调整存入和返回
版权声明:本文为weixin_43290820原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。