dom4j解析XML
CreateTime--2018年3月26日15:55:06
Author:Marydon
一、所需jar包
dom4j-1.6.1.jar
二、导入
import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element;
三、具体操作
1.字符串转document对象
方式一:
String result = "<Response><userName>Marydon</userName><error_text>成功</error_text></Response>"; // 将字符串转换成document对象 Document document = DocumentHelper.parseText(res);
方式二:
Document document2 = DocumentHelper.createDocument(); // 创建Document document 以xml的格式存放返回参数 Element request = document2.addElement("Request"); // 在 document中 新建一个Request节点 // 添加userId节点,并设值 request.addElement("userId").setText("1");
方式三:
StringBuilder sb = new StringBuilder(); sb.append("<Request>").append("<userId>").append("1").append(</userId>).append("</Request>"); // 将字符串转换成document对象 Document document = DocumentHelper.parseText(sb.toString());
2.将document对象转换成字符串
方式一:完全转换(头部信息+节点信息)
// 将document对象转换成xml格式字符串 String str = document.asXML().toString();
str所代表的是:
<?xml version="1.0" encoding="UTF-8"?> <Response><userName>Marydon</userName><error_text>成功</error_text></Response>
方式二:只获取节点信息
// 将document对象转换成xml格式字符串 String str = document.getRootElement().asXML().toString();
str所代表的是:
<Response><userName>Marydon</userName><error_text>成功</error_text></Response>
3.举例说明
将其封装成xml格式的数据
import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element;
第一种方式:操作document对象
// 返回xml格式数据 // 方式一 // 创建document对象 Document document = DocumentHelper.createDocument(); // 生成Response节点 Element response = document.addElement("Response"); // 添加子节点result_flag并将值设为0 response.addElement("result_flag").setText("0"); response.addElement("error_text").setText("成功"); // 生成Result节点 Element result = response.addElement("Result"); result.addElement("un_value").setText(""); // 设置token有效期(当天有效) result.addElement("valid_date").setText("2018-06-04"); // 将document对象转换成xml格式字符串 String xmlResult = document.asXML().toString(); System.out.println(xmlResult); /*<?xml version="1.0" encoding="UTF-8"?> <Response><result_flag>0</result_flag><error_text>成功</error_text><Result><un_value></un_value><valid_date>2018-06-04</valid_date></Result></Response>*/
第二种方式:字符串拼接
// 方式二 StringBuilder sb = new StringBuilder(); sb.append("<Response>"); sb.append("<result_flag>0</result_flag>"); sb.append("<error_text>成功</error_text>"); sb.append("<Result>"); sb.append("<un_value></un_value>"); sb.append("<valid_date>2018-06-04</valid_date>"); sb.append("</Result>"); sb.append("</Response>"); // 用于存储返回xml信息 xmlResult = sb.toString(); Document bodyDoc = null; try { bodyDoc = DocumentHelper.parseText(xmlResult); } catch (DocumentException e) { e.printStackTrace(); } xmlResult = bodyDoc.asXML(); System.out.println(xmlResult); /*<?xml version="1.0" encoding="UTF-8"?> <Response><result_flag>0</result_flag><error_text>成功</error_text><Result><un_value/><valid_date>2018-06-04</valid_date></Result></Response>*/
四、注意事项
1.以接口的形式进行传输时,"&"是特殊符号,不能直接传,必须转义成"&",否则报错;
2.将字符串转换成document对象(xml格式)时,上面两种实现方式的区别:
当所有的值都不为空时,转换结果一样;
但当返回的标签的值为空字符串""时
方式一,转换的是正常结果:
方式二,转换异常,会自动转换成自闭合标签(ethnicity、birth_date、address)