使用Dom4j解析XML为Map
文章目录
最近的项目中需要对接口进行测试。接口的返回值为XML,其中包含有具体的业务信息,需要解析出来进行判断。
为了方便解析及进一步操作,因此将其解析并转换为Map。
例如,我们有如下的XML文档:
<?xml version="1.0" encoding="utf-8"?>
<workflows>
<queryRequest>
<branchId>88037062</branchId>
<merSysId>00000317</merSysId>
<queryNo>948983692</queryNo>
<billType>00</billType>
<merBillStat>00</merBillStat>
<billDate>201610</billDate>
<individualArea>948983692</individualArea>
</queryRequest>
</workflows>
### 使用Dom4j进行解析
- 下载dom4j-1.6.1.jar
编写解析代码如下
private static Map<String,String> xml2Map(String xml) { Map<String, String> map = new HashMap<String, String>(); try { Document doc = DocumentHelper.parseText(xml); //将xml转为dom对象 Element root = doc.getRootElement(); //获取根节点 Element element = root.element("queryRequest");//获取名称为queryRequest的子节点 List<Element> elements = element.elements(); //获取这个子节点里面的所有子元素, 也可以element.elements("userList") 指定获取子元素 for (Object obj : elements) { //遍历子元素 element = (Element) obj; map.put(element.getName(), element.getTextTrim());/getName System.out.println(element.getName()+"--"+element.getTextTrim()); } } catch (Exception e) { e.printStackTrace(); } return map; }
以下这种写法也常见
public Boolean readStringXml(String xml) {
Document doc = null;
try {
doc = DocumentHelper.parseText(xml); // 将字符串转为XML
Element rootElt = doc.getRootElement(); // 获取根节点
Iterator<?> iter = rootElt.elementIterator("is_success"); // 获取根节点下的子节点head
// 遍历head节点
while (iter.hasNext()) {
Element recordEle = (Element) iter.next();
return recordEle.getText().equals("T")?true:false;
}
} catch (DocumentException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
这样我们就将XML转为了Map,关键是如何对XML进行解析,之后就是将值设置进Map中了。