解析XML字符串并存入数据库

发布时间:2024年01月14日


友情提醒:

先看文章目录,大致了解文章知识点结构,点击文章目录可直接跳转到文章指定位置。有用记得关注

第一章、功能需求和分析

1.1)具体需求

解析XML字符串,并将解析后得到的结果,按时存入数据库。

1.2)分析需求转为小的问题

①Xml字符串从哪里来,有没有具体示例?

回答:通过HttpCilent调用接口,返回Xml字符串

②用什么方式解析Xml字符串?

回答:将xml字符串转为json,再通过jsonObject获取数据后转为json字符串,将json字符串直接转为对象,存入数据库

③具体存入数据库的是哪些字段?

回答:与实体类对应的字段,根据具体业务决定

④按时存入的存入时间是?是以定时任务的方式吗?如何实现定时任务

回答:以定时任务每天早晚八点

第二章、解决方案

2.1)使用的框架和技术

springboot,mybatis-plus,json,定时任务。

2.2)需求中每个小问题的解决

①调用接口,获取Xml字符串

暂未写好

②Xml字符串解析为json,并获得具体数据
public class XmlUtil {

    public static String XmlToJson(String xmlString){
         xmlString = "<?xml version=\\\"1.0\\\" ?>\n" +
                "<RESULT>"+
                "<CLAZZ>"+
                 "<STUDENT>"+
                        "<STUDENT_ID>test1</STUDENT_ID>\n" +
                        "<STUDENT_NAME>test</STUDENT_NAME>\n" +
                        "<STUDENT_AGE>test1</STUDENT_AGE>\n"+
                 "</STUDENT>"+
                 " <STUDENT>"+
                        " <STUDENT_ID>test2</STUDENT_ID>"+
                        " <STUDENT_NAME>test2</STUDENT_NAME>"+
                        " <STUDENT_AGE>test2</STUDENT_AGE>"+
                 "</STUDENT>"+
                 "</CLAZZ>"+
                 "</RESULT>" ;

        JSONObject jsonObject = XML.toJSONObject(xmlString);
        System.out.println(jsonObject.getJSONObject("RESULT").getJSONObject("CLAZZ").get("STUDENT").toString());
        return  jsonObject.getJSONObject("RESULT").getJSONObject("CLAZZ").getJSONArray("STUDENT").toString();
    }
}
③数据库存入字段
@Service
public class ChginfoServiceImpl implements ChginfoService {


    @Autowired
    StudentMapper studentMapper;

    //接收json字符串,插入数据库
    public Integer insertChgData(String chgjson) {
        //创建objectMapper对象
        ObjectMapper objectMapper = new ObjectMapper();
        //忽略字段设置
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

/*        Student stu=null;
        try {
            //简单json直接解析转为对象,--》简单的步骤
            chg = objectMapper.readValue(chgjson, Student.class);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        Integer num = studentMapper.insert(stu);        */
         Student stu=null;
         List<Student> stuList = new ArrayList<>();
        try {
            //json数组解析转为对象--》更复杂的步骤
            //1、创建工厂对象
            TypeFactory typeFactory = objectMapper.getTypeFactory();
            //2、创建 具体实体类 的JavaType类型
            JavaType jsonPersonType = typeFactory.constructType(Student.class);
            //将jsonPersonType转化成List<JsonPerson>类型,则也就是要创建List<>内有参数的JavaType类型
            // 即 constructParametricType(List.class, jsonPersonType)---> List<JsonPerson>
            JavaType javaType = typeFactory.constructParametricType(List.class, jsonPersonType);
            //将传入的chgjson字符串,转为List<Student>对象
            stuList = objectMapper.readValue(chgjson, javaType);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

        //遍历存入数据
        for(Student s: stuList){
            studentMapper.insert(s);
        }

        return 1;
    }


}
④定时任务实现
文章来源:https://blog.csdn.net/baomingshu/article/details/135585105
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。