目前项目中需要将XML转换为Map,下面给出了自己的代码实现。请各路大神提供更好的代码实现。
场景:
在项目中需要解析XML文本字符串,需要将XML文本字符串映射为Map格式的对象。
需求:
1、为了提高性能,需要使用Stax进行解析
2、Map结构内部需要支持List、Map、String三种数据格式
示例:
例一:
* 字符串:<name>BurceLiu</name><age>18</age>
* 转换为的Map结构:{age=18, name=BurceLiu}
例二:
* 字符串:<student><name>BurceLiu</name><age>18</age></student>
* 转换为的Map结构:{student={age=18, name=BurceLiu}}
例三:
* 字符串:<student><name>BurceLiu</name><age>18</age></student><student><name>BurceLi</name><age>28</age></student>
* 转换为的Map结构:{student=[{age=18, name=BurceLiu}, {age=28, name=BurceLi}]}
例四:
* 字符串:<students><student><name>BurceLiu</name><age>18</age></student><student><name>BurceLi</name><age>28</age></student></students>
* 转换为的Map结构:{students={student=[{age=18, name=BurceLiu}, {age=28, name=BurceLi}]}}
例五:
* 字符串:<str>str1</str><str>str2</str><str>str3</str>
* 转换为的Map结构:{str=[str1, str2, str3]}
代码实现
定义解析接口,提供2个核心方法
public interface IXMLParser {
/**
* xml格式字符串转换为Map
* @param xml
* @return
*/
public Map<String, Object> parse(String xml);
/**
* 初始化动作
* 可以设置初始化动作,例如根节点名称,
*/
public void init();
}
具体实现类,采用Stax技术实现该方案
package com.juxtapose.xml.parser;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLSt