依赖
<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();
}
}
结果输出