Java|Java 解析xml报文放入Map,并判断所有xml标签是否为空

在网上找了很久,找到的一个比较好的xml解析方法,封装好的解析xml报文的方法:

public class analyxml{public Map map = new HashMap(); public Map parse(String soap) throws DocumentException { Document doc = DocumentHelper.parseText(soap); // 报文转成doc对象 Element root = doc.getRootElement(); // 获取根元素,准备递归解析这个XML树 getCode(root); return map; } public void getCode(Element root) { if (root.elements() != null) { List list = root.elements(); // 如果当前跟节点有子节点,找到子节点 for (Element e : list) {// 遍历每个节点 if (e.elements().size() > 0) { getCode(e); // 当前节点不为空的话,递归遍历子节点; } if (e.elements().size() == 0) { map.put(e.getName(), e.getTextTrim()); } // 如果为叶子节点,那么直接把名字和值放入map } } } }

测试xml报文:
FMSPAY0010 04 20181029085400000001 20181023085400 20181023 20181105153740558 银行编号或密码不正确!


测试类:
import java.util.Map; import org.dom4j.DocumentException; import com.com.analyxml; public class test2 { public static void main(String[] args) throws DocumentException { // TODO Auto-generated method stubString xml = "FMSPAY001004201810290854000000012018102308540020181023990220181105161524325银行编号或密码不正确!"; analyxml aly = new analyxml(); Map map = aly.parse(xml); String ReturnCode = map.get("ReturnCode").toString().trim(); String ResponseTime = map.get("ResponseTime").toString().trim(); System.out.println("ReturnCode===" + ReturnCode); System.out.println("ResponseTime===" + ResponseTime); }}


【Java|Java 解析xml报文放入Map,并判断所有xml标签是否为空】结果为:
Java|Java 解析xml报文放入Map,并判断所有xml标签是否为空
文章图片



由于项目需要尽可能的把错误提示的明显一点,(如果请求委托方的信息有问题,委托方也会返回xml报文回来,但是所有标签都是空值,)所以要判断xml的所有标签是否都是空值,在网上找了很久没有找到合适的判断xml是否为空的方法,于是写了一个小方法,如下: (利用的是set集合的不可重复性)

public static boolean ishave(Map map){//利用set的不可重复性来判断Map中是否所有的value都是空Set hs = new HashSet(); boolean status = false; //遍历Map for (Entry entry : map.entrySet()) { System.out.println("key= " + entry.getKey()); System.out.println("value= "https://www.it610.com/article/+ entry.getValue()); hs.add(entry.getValue()); } if(hs.size()>1){ status = true; }return status; }


    推荐阅读