随手记录
/**
* XML格式字符串转换为Map
*
* @param xmlStr XML字符串
* @return XML数据转换后的Map
* @since 4.0.8
*/
public static Map<String, Object> xmlToMap(String xmlStr) {
return xmlToMap(xmlStr, new HashMap<>());
}
/**
* XML格式字符串转换为Map<br>
* 只支持第一级别的XML,不支持多级XML
*
* @param xmlStr XML字符串
* @param result 结果Map类型
* @return XML数据转换后的Map
* @since 4.0.8
*/
public static Map<String, Object> xmlToMap(String xmlStr, Map<String, Object> result) {
final Document doc = parseXml(xmlStr);
final Element root = getRootElement(doc);
root.normalize();
return xmlToMap(root, result);
}
/**
* XML节点转换为Map
*
* @param node XML节点
* @param result 结果Map类型
* @return XML数据转换后的Map
* @since 4.0.8
*/
@SuppressWarnings("unchecked")
public static Map<String, Object> xmlToMap(Node node, Map<String, Object> result) {
if (null == result) {
result = new HashMap<>();
}
final NodeList nodeList = node.getChildNodes();
final int length = nodeList.getLength();
Node childNode;
Element childEle;
for (int i = 0; i < length; ++i) {
childNode = nodeList.item(i);
if (false == isElement(childNode)) {
continue;
}
childEle = (Element) childNode;
final Object value = result.get(childEle.getNodeName());
Object newValue;
if (childEle.hasChildNodes()) {
// 子节点继续递归遍历
final Map<String, Object> map = xmlToMap(childEle);
if (MapUtil.isNotEmpty(map)) {
newValue = map;
} else{
newValue = childEle.getTextContent();
}
} else {
newValue = childEle.getTextContent();
}
if (null != newValue) {
if (null != value) {
if (value instanceof List) {
((List<Object>) value).add(newValue);
} else {
result.put(childEle.getNodeName(), CollUtil.newArrayList(value, newValue));
}
} else {
result.put(childEle.getNodeName(), newValue);
}
}
}
return result;
}