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 stub
		
		String 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); } }

 

结果为:

 

 

由于项目需要尽可能的把错误提示的明显一点,(如果请求委托方的信息有问题,委托方也会返回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= " + entry.getValue()); 
 
			   hs.add(entry.getValue());

	    } 
		
		if(hs.size()>1){
			status = true;
		}
		
		return status;
		
	}

 

你可能感兴趣的:(Java 解析xml报文放入Map,并判断所有xml标签是否为空)