在controller层中我们获取到整个xml文件,这时候我们需要去把它导入到数据库中
//故障明细解析 @ResponseBody @PostMapping("/faultImport") R faultImport(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws MalformedURLException { String fileName = file.getOriginalFilename();//file.getOriginalFilename()是得到上传时的文件名 fileName = fileName.substring(0,fileName.lastIndexOf("."))+System.currentTimeMillis()+fileName.substring(fileName.lastIndexOf("."),fileName.length()); //fileName:SHL11D_11.121524712298856.xml//返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。 SAXReader reader = new SAXReader(); try { FileUtil.uploadFile(file.getBytes(), bootdoConfig.getUploadPath()+"xml/", fileName); //删除9999协议 dimFaultService.deleteByProtocolId(9999); // 通过reader对象的read方法加载books.xml文件,获取docuemnt对象。 Document document = reader.read(new File(bootdoConfig.getUploadPath()+"xml/"+fileName));phm-web/src/main/resources/static/upload/xml/SHL11D_11.121524712298856.xml // 通过document对象获取根节点faultStore Element faultStore = document.getRootElement(); // 获取迭代器,根节点遍历子节点(elementIterator) Iterator it = faultStore.elementIterator(); while (it.hasNext()) { Element fault = (Element) it.next(); //再从子节点在遍历其子节点(elementIterator) Iterator itt = fault.elementIterator(); while (itt.hasNext()) { Element faultChild = (Element) itt.next(); if("Fault".equals(faultChild.getName())){ List list = faultChild.attributes();//对节点访问其属性用(attributes) DimFaultDO dimFault = new DimFaultDO(); for(int i=0;i;i++){ Attribute item = (Attribute)list.get(i); if(i==0){
@RequestParam是传递参数的@RequestParam用于将请求参数区数据映射到功能处理方法的参数上。
String fileName = file.getOriginalFilename();//file.getOriginalFilename()是得到上传时的文件名带后缀
fileName=fileName.substring(0,fileName.lastIndexOf("."))+System.currentTimeMillis()+fileName.substring(fileName.lastIndexOf("."),fileName.length());
返回值为:fileName:SHL11D_11.121524712298856.xml
System.currentTimeMillis()
返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。
SAXReader reader = new SAXReader()
SAXReader 是dom4j里面用来解析xml
public static void uploadFile(byte[] file, String filePath, String fileName) throws Exception { File targetFile = new File(filePath); if (!targetFile.exists()) { targetFile.mkdirs(); } FileOutputStream out = new FileOutputStream(filePath + fileName); out.write(file); out.flush(); out.close(); }
其中第二个路径参数 我们做了处理
@Component @ConfigurationProperties(prefix = "bootdo") public class BootdoConfig { //上传路径 private String uploadPath; public String getUploadPath() { return uploadPath; } public void setUploadPath(String uploadPath) { this.uploadPath = uploadPath; } }
封装一个bean,然后给他设置路径属性利用@ConConfigurationPropertice注解映射到yml文件中去
这样路径就固定到我们所需的具体地方
dimFaultService.deleteByProtocolId(9999);
id="deleteByProtocolId">
delete from phm_dim_fault where protocol_id = #{value}
我们设置一个固定ID,每当我们有新的xml文件导入时,我们就能删除掉原来的再导入新的文件
Document document = reader.read(new File(bootdoConfig.getUploadPath()+"xml/"+fileName))
//phm-web/src/main/resources/static/upload/xml/SHL11D_1
// 通过reader对象的read方法加载books.xml文件,获取docuemnt对象。
Element faultStore = document.getRootElement();
// 通过document对象获取根节点faultStore
Iterator it = faultStore.elementIterator();
// 获取迭代器,根节点遍历子节点(elementIterator)
Iterator itt = fault.elementIterator();
//再从子节点在遍历其子节点(elementIterator)
faultChild.getName()
//获取子节点的命名
List list = faultChild.attributes();
//对节点访问其属性用(attributes),类型为Elements封装好的List
然后我们进行具体的赋值到数据库中去,这样解析xml文件完成