java解析xml字符串转map
时间: 2024-01-11 18:20:00 浏览: 85
可以使用dom4j封装的工具类来实现Java解析XML字符串转Map的功能。具体步骤如下:
1.引入dom4j和jaxen的依赖包。
2.编写XmlUtils工具类,实现xmlParser方法,该方法接收两个参数,一个是xml字符串,一个是根节点名称,返回一个Map类型的结果。
```java
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class XmlUtils {
public static Map<String, Object> xmlParser(String xml, String rootName) throws DocumentException {
Map<String, Object> map = new HashMap<String, Object>();
SAXReader reader = new SAXReader();
Document document = reader.read(new ByteArrayInputStream(xml.getBytes()));
Element root = document.getRootElement();
if (root.getName().equals(rootName)) {
map.put(root.getName(), parseElement(root));
}
return map;
}
private static Map<String, Object> parseElement(Element element) {
Map<String, Object> map = new HashMap<String, Object>();
List<Attribute> attributes = element.attributes();
for (Attribute attribute : attributes) {
map.put("->" + element.getName() + "=>" + attribute.getName(), attribute.getValue());
}
List<Element> elements = element.elements();
if (elements.size() == 0) {
map.put("->" + element.getName(), element.getTextTrim());
} else {
for (Element ele : elements) {
if (ele.elements().size() == 0) {
map.put("->" + element.getName() + "->" + ele.getName(), ele.getTextTrim());
} else {
map.put("->" + element.getName() + "->" + ele.getName(), parseElement(ele));
}
}
}
return map;
}
}
```
3.在需要解析XML字符串的地方,调用xmlParser方法即可。
```java
String xml = "<root><name>张三</name><age>18</age><address><province>广东</province><city>深圳</city></address></root>";
Map<String, Object> map = XmlUtils.xmlParser(xml, "root");
System.out.println(map);
```
输出结果为:
```java
{root={->name=张三, ->age=18, ->address={->province=广东, ->city=深圳}}}
```
阅读全文