xml 工具类

本文介绍如何使用Java解析XML字符串并将其转换为Map结构,包括解析过程、使用SAXReader类读取XML字符串、获取根元素及其子元素,并最终将XML数据映射为Map对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.chb.abc.common.util;

import java.io.StringReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class ParseXml {

	public static void main(String[] args) throws Exception{
		String xml="<?xml version='1.0' encoding='UTF-8'?><RESP_PARAM><PUB_INFO><RETURN_RESULT>0</RETURN_RESULT><RETURN_DESC>成功</RETURN_DESC><OSB_SERIAL_NO>osb-cs01-srv1^14085508470000000001</OSB_SERIAL_NO></PUB_INFO><BUSI_INFO><QRCODE_ID>4415</QRCODE_ID><QRCODE_NAME>DimensionalCode</QRCODE_NAME><QRCODE_IMAGE>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</QRCODE_IMAGE></BUSI_INFO></RESP_PARAM>";
		Map retMap=xml2Map(xml);
		System.out.println("========");
	}
	public static Map xml2Map(String xml) throws DocumentException {
		
		SAXReader reader = new SAXReader();
		StringReader sr = null;
		try{
			sr = new StringReader(xml);
			Document document = reader.read(sr);
			Element root = document.getRootElement();
			return dom2Map(root);
		}finally {
			if(sr != null) {
				sr.close();
			}
		}
	}

	private static Map dom2Map(Element e) {
		Map map = new HashMap();
		List list = e.elements();
		if (list.size() > 0) {
			for (int i = 0; i < list.size(); i++) {
				Element iter = (Element) list.get(i);
				List mapList = new ArrayList();
				if (iter.elements().size() > 0) {
					Map m = dom2Map(iter);
					if (map.get(iter.getName()) != null) {
						Object obj = map.get(iter.getName());
						if (obj instanceof List) {
							mapList = (List) obj;
							mapList.add(m);
						} else {
							mapList = new ArrayList();
							mapList.add(obj);
							mapList.add(m);
						}
						map.put(iter.getName(), mapList);
					} else
						map.put(iter.getName(), m);
				} else {
					if (map.get(iter.getName()) != null) {
						Object obj = map.get(iter.getName());
						if (obj instanceof List) {
							mapList = (List) obj;
							mapList.add(iter.getText());
						} else {
							mapList = new ArrayList();
							mapList.add(obj);
							mapList.add(iter.getText());
						}
						map.put(iter.getName(), mapList);
					} else
						map.put(iter.getName(), iter.getText());
				}
			}
		} else
			map.put(e.getName(), e.getText());
		return map;
	}	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值