java 读取xml文件成List格式并导入数据库完整操作

依赖

 <dependency>
            <!-- jsoup HTML parser library @ https://jsoup.org/ -->
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.13.1</version>
        </dependency>

        <dependency>
            <groupId>org.dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>2.1.3</version>
        </dependency>

        <dependency>
            <groupId>jaxen</groupId>
            <artifactId>jaxen</artifactId>
            <version>1.2.0</version>
        </dependency>

xml文件格式

<TableInfo>
	<Table>
		<TableIndex>5701</TableIndex>
		<TableName>谭小</TableName>
	</Table>
	<Table>
		<TableIndex>5702</TableIndex>
		<TableName>ADC</TableName>
	</Table>
	<Table>
		<TableIndex>5703</TableIndex>
		<TableName>就是举个例子</TableName>
	</Table>
	<Table>
		<TableIndex>5704</TableIndex>
		<TableName>搜索</TableName>
	</Table>
</TableInfo>

代码实现

控制层

@Autowired
    ITableInfoGlobleService tableInfoGlobleService;

    @ApiOperation("xml数据导入")
    @PostMapping("/import")
    public BaseResponse importXml(@RequestParam("file") MultipartFile uploadFile) {

        try {
            InputStream inputStream = uploadFile.getInputStream();
            List<Object> items = tableInfoGlobleService.readXMLToList(inputStream, TableInfoGloble.class);
            List<TableInfoGloble> list = new ArrayList<TableInfoGloble>();
            for (int i = 0; i < items.size(); i++) {
                //将List<Object>转为对应的实体类
                list.add((TableInfoGloble) items.get(i));
            }
            tableInfoGlobleService.insert(list);
            return BaseResponse.success();
        } catch (Exception ex) {
            return BaseResponse.fail(ex.getMessage());
        }
    }

服务层

解析xml文件

/**
     * 读取xml文件
     * @param inputStream
     * @param clazz
     * @return
     */
    List<Object> readXMLToList(InputStream inputStream, Class<TableInfoGloble> clazz);

保存xml文件到数据库

/**
     * 导入数据
     * @param list
     */
    void insert(List<TableInfoGloble> list);

实现层

解析xml文件

@Override
    public  List<Object> readXMLToList(InputStream inputStream, Class<TableInfoGloble> clazz) {
//        s = "<TableInfo><Table><TableIndex>5701</TableIndex><TableName>9001配电系统ATMT</TableName></Table><Table><TableIndex>5702</TableIndex><TableName>9001配电系统动力ION9000</TableName></Table></TableInfo>";
        //初始化list结合用来存放数据
        List<Object> list = new ArrayList<>();
        try {
            //创建SAXBuilder对象
            //SAXBuilder是一个JDOM解析器,能够将路径中xml文件解析到Document对象

            SAXReader reader = new SAXReader();
            //指定编码格式为utf_8
            org.dom4j.Document doc = reader.read(new InputSource(inputStream));
            //可以通过document对象获取xml文件的根节点
            Element root = doc.getRootElement();
            System.out.println("root"+root);
            // 获取根节点下的子节点items,即要解析XML多节点的父节点,可根据具体情况修改
//           org.dom4j.Element body = root.element("TableInfo");
            //获取根节点下面的二级节点
            org.dom4j.Element foo;
            遍历,每一个table    elementiterator()  方法获取是该节点的孩子节点代表Table
            Iterator<Element> it = root.elementIterator();
            while(it.hasNext()) {
                foo = (Element) it.next();
                String tableIndex = foo.elementText("TableIndex");
                String tableName = foo.elementText("TableName");
                TableInfoGloble tableInfo = new TableInfoGloble();
                long parseLong = Long.parseLong(tableIndex);
                tableInfo.setTableIndex(parseLong);
                tableInfo.setTableName(tableName);
                list.add(tableInfo);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }
 @Override
    public void insert(List<TableInfoGloble> list){
        try {
            for(TableInfoGloble tableInfo:list) {
                QueryWrapper<TableInfoGloble> queryWrapper = new QueryWrapper<>();
                queryWrapper.lambda().eq(TableInfoGloble::getTableIndex,tableInfo.getTableIndex());
                List<TableInfoGloble> infoList = list(queryWrapper);
                if(CollUtil.isNotEmpty(infoList)) {
                    tableInfo.setTableIndex(infoList.get(0).getTableIndex());
                    updateById(tableInfo);
                }
                save(tableInfo);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

结果输出

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值