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

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

public class analyxml{

    public Map<String, Object> map = new HashMap<String, Object>();

	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<Element> 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报文:

<?xml version="1.0" encoding="UTF-8"?>
<Service>
	<Header>
		<ServiceCode>FMSPAY0010</ServiceCode>
		<ChannelId>04</ChannelId>
		<ExternalReference>20181029085400000001</ExternalReference>
		<RequestTime>20181023085400</RequestTime>
		<TradeDate>20181023</TradeDate>
		<Response>
			<ReturnCode></ReturnCode>
			<ResponseTime>20181105153740558</ResponseTime>
			<ReturnMessage>银行编号或密码不正确!</ReturnMessage>
		</Response>
	</Header>
</Service>

 

测试类:

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 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Service><Header><ServiceCode>FMSPAY0010</ServiceCode><ChannelId>04</ChannelId><ExternalReference>20181029085400000001</ExternalReference><RequestTime>20181023085400</RequestTime><TradeDate>20181023</TradeDate><Response><ReturnCode>9902</ReturnCode><ResponseTime>20181105161524325</ResponseTime><ReturnMessage>银行编号或密码不正确!</ReturnMessage></Response></Header></Service>";
		
		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<String, Object> map){
		
		//利用set的不可重复性来判断Map中是否所有的value都是空
		
		Set hs = new HashSet();
		boolean status = false;
		
		//遍历Map
		for (Entry<String, Object> 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;
		
	}

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值