Springboot+bootstraps xml文件的获取和解析方法详解

在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时间(格林威治时间)197011000秒所差的毫秒数。
  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文件中去

Springboot+bootstraps xml文件的获取和解析方法详解_第1张图片

这样路径就固定到我们所需的具体地方

 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文件完成



你可能感兴趣的:(株机实习项目)