Dom4j实现xml到map转换

本文介绍如何利用Dom4j库将XML格式的字符串转换为Map对象,其中键由XML节点路径组成,值为节点内容。通过示例代码展示了如何处理包括多层嵌套节点在内的XML转换过程。

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


将xml格式字符串转换成一个map格式,其中key为xml中的节点名称,多层中间用“.”连接,value为节点内容。

1、输入
<?xml version="1.0" encoding="UTF-8"?>
<Response>
      <ResultCode>000000</ResultCode>
      <ResultDesc>成功</ResultDesc>
        <nn>
		<test>111</test>
		<a>
			<b>r</b>
		</a>
	</nn>
</Response>
2、输出
Response.nn.test=111
Response.ResultCode=000000
Response.ResultDesc=成功
Response.nn.a.b=r

3、代码实现
importorg.dom4j.Document;
importorg.dom4j.DocumentException;
importorg.dom4j.DocumentHelper;
importorg.dom4j.Element;

importjava.util.HashMap;
importjava.util.Iterator;
importjava.util.Map;

/**
*
*/
public classDom4jUtil {
/**
*@description将xml字符串转换成map
*@paramxml
*@returnMap
*/
public staticMap readStringXmlOut(String xml) {
Map map =newHashMap();
Document doc =null;
try{
// 将字符串转为XML
doc = DocumentHelper.parseText(xml);
// 获取根节点
Element rootElt = doc.getRootElement();
// 拿到根节点的名称
map.putAll(readStringXmlOut(rootElt));

}catch(DocumentException e) {
e.printStackTrace();
}catch(Exception e) {
e.printStackTrace();
}
returnmap;
}
/**
*@description将xml字符串转换成map
*@paramrootElt
*@returnMap
*/
public staticMap readStringXmlOut(Element rootElt) {
Map map =newHashMap();
try{
// 拿到节点的名称
if(rootElt.isTextOnly()){
map.put(rootElt.getName(),rootElt.getStringValue());
}else{
// 获取根节点下的子节点
Iterator iter = rootElt.elementIterator();
while(iter.hasNext()) {
Element recordEle = (Element) iter.next();
recordEle.setName(recordEle.getParent().getName() +"."+ recordEle.getName());
map.putAll(readStringXmlOut(recordEle));
}
}
}catch(Exception e) {
e.printStackTrace();
}
returnmap;
}

public static voidmain(String[] args) {

// 下面是需要解析的xml字符串例子
String xmlString ="<?xml version=\"1.0\" encoding=\"UTF-8\"?><Response>\n"+
" <ResultCode>000000</ResultCode>\n"+
" <ResultDesc>成功</ResultDesc>\n"+
" <nn><test>111</test><a><b>r</b></a></nn>\n"+
"</Response>";
Map map =readStringXmlOut(xmlString);
Iterator iters = map.keySet().iterator();
while(iters.hasNext()) {
String key = iters.next().toString();// 拿到键
String val = map.get(key).toString();// 拿到值
System.out.println(key + "="+ val);
}
}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值