java XML转List、Map(dom4j)

本文介绍了一种将XML数据解析并转换为Java Map和List对象的方法。通过使用dom4j库,该Java类能有效处理复杂的XML结构,适用于需要将XML数据映射到Java对象的应用场景。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

public class XmlToList {

	public static Map xmltoMap(Element nodeElement) {
		try {
			Map map = new HashMap();
			if (nodeElement.isTextOnly()) {
				map.put(nodeElement.getName(), nodeElement.getText());
			} else {
				List node = nodeElement.elements();
				Iterator it = node.iterator();
				while (it.hasNext()) {
					Element elm = (Element) it.next();
					if (!elm.isTextOnly()) {
						List lis = xmltoList(elm);
						map.put(elm.getName(), lis);
						lis = null;
					} else {
						map.put(elm.getName(), elm.getText());
					}
					elm = null;
				}
				node = null;
			}

			nodeElement = null;
			return map;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public static List xmltoList(Element nodesElement) {
		try {
			List list = new ArrayList();
			List nodes = nodesElement.elements();
			for (Iterator its = nodes.iterator(); its.hasNext();) {
				Element nodeElement = (Element) its.next();
				Map map = xmltoMap(nodeElement);
				list.add(map);
				map = null;
			}
			nodes = null;
			nodesElement = null;
			return list;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public static List xml2ListExecute(String xml) {
		try {
			List list = new ArrayList();
			Document document = DocumentHelper.parseText(xml);
			Element nodesElement = document.getRootElement();
			list = xmltoList(nodesElement);
			return list;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public static Map xml2MapExecute(String xml) {
		try {
			Map map = new HashMap();
			Document document = DocumentHelper.parseText(xml);
			Element nodesElement = document.getRootElement();
			map = xmltoMap(nodesElement);
			return map;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public static void main(String[] args) {
		String xmlStr = "<ROOT><ITEM><BBXH>000000021007</BBXH><ABS><AAA>111</AAA><BBB>222</BBB></ABS><QX_JGDM>130100000000000</QX_JGDM><BBMC>130100000统计报表</BBMC><JG_MC>130100000委</JG_MC><LRSJ>2013-12-04</LRSJ><SJSHRQ></SJSHRQ><SJSHR_DM></SJSHR_DM><ND>2013</ND><HZBZ>N</HZBZ></ITEM><ITEM><BBXH>20131204000000021008</BBXH><QX_JGDM>130100000000000</QX_JGDM><BBMC>130100000130100000报表</BBMC><JG_MC>130100000委</JG_MC><LRSJ>2013-12-04</LRSJ><SJSHRQ></SJSHRQ><SJSHR_DM></SJSHR_DM><ND>2013</ND><HZBZ>N</HZBZ></ITEM></ROOT>";
		String xmlStr1 = "<ROOT><ITEM><BBXH>345</BBXH></ITEM></ROOT>";
		String xmlStr2 = "<ROOT><ITEM><BBXH>20131204000000021007</BBXH><ABS><AAA>111</AAA><BBB>222</BBB></ABS><QX_JGDM>130100000000000</QX_JGDM><BBMC>130100000报表</BBMC><JG_MC>130100000130100000委</JG_MC><LRSJ>2013-12-04</LRSJ><SJSHRQ></SJSHRQ><SJSHR_DM></SJSHR_DM><ND>2013</ND><HZBZ>N</HZBZ></ITEM></ROOT>";
		/*
		 * List list = xml2ListExecute(xmlStr); for (Iterator its =
		 * list.iterator(); its.hasNext();) { Map map = (Map)its.next();
		 * if(map.get("ROOT")!=null){ System.out.println(map.get("ROOT")); }
		 * if(map.get("ITEM")!=null){ System.out.println(map.get("ITEM")); }
		 * if(map.get("ABS")!=null){
		 * System.out.println(((Map)((List)map.get("ABS")).get(0)).get("AAA"));
		 * }
		 * 
		 * 
		 * //
		 * System.out.println(((Map)((List)map.get("ABS")).get(0)).get("aaa"));
		 * }
		 */
		Map map = xml2MapExecute(xmlStr1);
		System.out.println(((Map) ((List) map.get("ITEM")).get(0)).get("BBXH"));
		// xmlStr2
		/*
		 * System.out.println(((Map)((List)map.get("ITEM")).get(0)).get("BBXH"));
		 * System.out.println(((Map)((List)map.get("ITEM")).get(1)).get("AAA"));
		 * System.out.println(((Map)((List)map.get("ITEM")).get(1)).get("BBB"));
		 */
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值