需求:前后端分离项目,后端Springboot框架,将学生信息通过xml文件格式导入。
一个学生信息,以及该学生选择的学科。
student.xml文件格式如下:
StudentController.java
@PostMapping("import/xml")
public void importXml(@RequestBody MultipartFile file){
studentService.importXml(file);
}
StudentService.java
void importXml(MultipartFile file);
StudentServiceImpl.java
@Override
public void importXml(MultipartFile file) {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = null;
StudentDto dto = new StudentDto();
try {
builder = factory.newDocumentBuilder();
Document document = builder.parse(file.getInputStream());
//解析info节点
NodeList infoNodeList = document.getElementsByTagName("info");
Student student= analysisImportXmlInfo(infoNodeList);
//解析nodes节点
NodeList elementSubjectList = document.getElementsByTagName("subjects");
List<Subject> subjects= analysisImportXmlSubjects(elementSubjectList );
//保存入库
saveDataInfo(dto);
} catch (Exception e) {
e.printStackTrace();
}
}
private Student analysisImportXmlInfo(NodeList infoNodeList){
Student student = new Student();
for (int i=0;i<infoNodeList.getLength();i++){
Element element = (Element) infoNodeList.item(i);
if (element.getElementsByTagName("no").item(0).getFirstChild() != null){
student.setNo(element.getElementsByTagName("no").item(0).getFirstChild().getNodeValue());
}
if (element.getElementsByTagName("name").item(0).getFirstChild() != null){
student.setName(element.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());
}
if (element.getElementsByTagName("age").item(0).getFirstChild() != null){
student.setAge(element.getElementsByTagName("age").item(0).getFirstChild().getNodeValue());
}
}
return student;
}
private List<Subject> analysisImportXmlSubjects(NodeList elementSubjectList ){
List<Subject> subjects = new ArrayList<>();
if (elementSubjectList .getLength() < 1) {
return new ArrayList<>();
}
Element element = (Element) elementSubjectList .item(0);
NodeList idList = element.getElementsByTagName("id");
for (int i = 0;i<idList.getLength();i++) {
Subject subject = new Subject();
if (element.getElementsByTagName("score").item(i).getFirstChild() != null) {
subject.setScore(element.getElementsByTagName("score").item(i).getFirstChild().getNodeValue());
}
if (element.getElementsByTagName("subjectName").item(i).getFirstChild() != null) {
subject.setSubjectName(element.getElementsByTagName("subjectName").item(i).getFirstChild().getNodeValue());
}
subjects .add(subject);
}
return subjects ;
}