1、Dom4JUtil
package xxx.xx目录.controller;
import lombok.extern.slf4j.Slf4j;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@Slf4j
public class Dom4JUtil {
public static Map<String, Object> getInfo(String strXml) throws Exception {
Map<String, Object> result = new HashMap<>();
//临时存放查询后的结果
String filePath = "E:\\" + System.currentTimeMillis() + ".xml";
StringBuffer strBuf = new StringBuffer();
strBuf.append("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n")
.append("<class><str>")
.append(strXml)
.append("</str></class>");
saveFiles(strBuf.toString(), filePath);
//1.创建Reader对象
SAXReader reader = new SAXReader();
//2.加载xml
Document document = reader.read(new File(filePath));
//3.获取根节点
Element rootElement = document.getRootElement();
Iterator iterator = rootElement.elementIterator();
while (iterator.hasNext()){
Element stu = (Element) iterator.next();
List<Attribute> attributes = stu.attributes();
log.info("获取属性值-->");
for (Attribute attribute : attributes) {
System.out.println(attribute.getValue());
}
log.info("遍历子节点-->");
Iterator iterator1 = stu.elementIterator();
while (iterator1.hasNext()){
Element stuChild = (Element) iterator1.next();
// System.out.println("节点名:"+stuChild.getName()+"---节点值:"+stuChild.getStringValue());
result.put(stuChild.getName(), stuChild.getStringValue());
}
}
//删除临时文件
Files.deleteIfExists(Paths.get(filePath));
return result;
}
public static void saveFiles(String strXml, String filePath) {
FileWriter fwriter = null;
try {
// true表示不覆盖原来的内容,而是加到文件的后面。若要覆盖原来的内容,直接省略这个参数就好
fwriter = new FileWriter(filePath);
fwriter.write(strXml);
} catch (IOException ex) {
ex.printStackTrace();
} finally {
try {
fwriter.flush();
fwriter.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
public static void main(String[] args) throws Exception {
String strXml = "<ERR>OK</ERR><时间>20211021172647</时间><BATCHNO>1</BATCHNO><AAB301>620001</AAB301><AAZ500>X00000019</AAZ500><AAC002>620101198001010133</AAC002><AAC003>姓名一</AAC003><AAC161>CHN</AAC161><AAC058>01</AAC058><AAC147>620101198001010133</AAC147><AAB099>20300101</AAB099><AAC004>1</AAC004><AAC005>01</AAC005><AAC006>19800101</AAC006><AAC008>1</AAC008><AAC009>11</AAC009><AAC010>户口地址1</AAC010><AAC067>移动电话1</AAC067><AAE005>固定电话1</AAE005><AAE006>常住地址1</AAE006><AAE007>邮编01</AAE007><AAE159>1@12333.cn</AAE159><AAB001>单位编号1</AAB001><AAB004>单位名称1</AAB004><ACA111>2030000</ACA111><JHRZH>监护人证号1</JHRZH><JHRXM>监护人姓名1</JHRXM><JHRDH>监护人电话1</JHRDH>";
getInfo(strXml);
}
}
2、使用Dom4JUtil处理请求成功数据
/**
* 信息查询
* @param 参数
* @return
*/
@GetMapping("/getXXX")
public Map<String, Object> getUserInfo(参数){
Map<String, Object> result = new HashMap<>()
try {
Call call = (Call)(new Service()).createCall();
call.setTargetEndpointAddress(new URL(wwUrl));
call.setOperationName(new QName("url", "接口名"));
call.setTimeout(30000);
String res = (String)call.invoke(new String[]{参数1,参数2,...});
System.out.println(res);
log.info("<<信息查询>>接口调用返回结果:" + res);
String status = res.split("</ERR>")[0].replace("<ERR>", "");
if (!"OK".equals(status)) {
result.put("code", "002");
result.put("message", status);
} else {
//处理成功信息
**return Dom4JUtil.getInfo(res);**
}
} catch (ServiceException e) {
log.error(e.getMessage());
result.put("code","003");
result.put("message",ERROR);
return result;
} catch (MalformedURLException e) {
log.error(e.getMessage());
result.put("code","003");
result.put("message",ERROR);
return result;
} catch (RemoteException e) {
log.error(e.getMessage());
result.put("code","003");
result.put("message",ERROR);
return result;
} catch (Exception e) {
log.error(e.getMessage());
result.put("code","003");
result.put("message",ERROR);
return result;
}
return result;
}