首先引入依赖
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.1</version>
</dependency>
<!-- Jackson for XML processing -->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.12.3</version>
</dependency>
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user>
<id>1</id>
<name>John Doe</name>
<age>30</age>
</user>
<user>
<id>2</id>
<name>ceadwac</name>
<age>11</age>
</user>
<ces>
<hjr>cea</hjr>
<shiyan>ac</shiyan>
</ces>
<ca>测试</ca>
</users>
已以上xml内容为例
需要三个实体类:users包含所有内容的实体类、user实体类、ces实体类
users实体类
@XmlRootElement(name = "users")
public class Users {
private List<User> user;
private String ca;
private List<Ces> ces;
@XmlElement(name = "user") // 显式指定XML元素名称
public List<User> getUser() {
return user;
}
public void setUser(List<User> user) {
this.user = user;
}
@XmlElement(name = "ces") // 显式指定XML元素名称
public List<Ces> getCes() {
return ces;
}
public void setCes(List<Ces> ces) {
this.ces = ces;
}
@XmlElement(name = "ca") // 显式指定XML元素名称
public String getCa() {
return ca;
}
public void setCa(String ca) {
this.ca = ca;
}
}
user实体类
@XmlRootElement(name = "user")
public class User {
private Integer id;
private String name;
private Integer age;
@XmlElement(name = "id") // 显式指定XML元素名称
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@XmlElement(name = "name") // 显式指定XML元素名称
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlElement(name = "age") // 显式指定XML元素名称
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
ces实体类
@XmlRootElement(name = "ces")
public class Ces {
private String hjr;
private String shiyan;
@XmlElement(name = "hjr") // 显式指定XML元素名称
public String getHjr() {
return hjr;
}
public void setHjr(String hjr) {
this.hjr = hjr;
}
@XmlElement(name = "shiyan") // 显式指定XML元素名称
public String getShiyan() {
return shiyan;
}
public void setShiyan(String shiyan) {
this.shiyan = shiyan;
}
@Override
public String toString() {
return "Ces{" +
", hjr='" + hjr + '\'' +
", shiyan=" + shiyan +
'}';
}
}
UserMapper
@Mapper
public interface UserMapper extends BaseMapper<Users> {
}
UserService
@Service
public class UserService{
@Autowired
private UserMapper userMapper;
@Transactional
public void importUsersFromXml(File xmlFile) throws IOException, JAXBException {
// 使用JAXB解析XML
JAXBContext context = JAXBContext.newInstance(Users.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
Users users = (Users) unmarshaller.unmarshal(xmlFile);
// 输出解析结果
System.out.println("CA: " + users.getCa());
for (User user : users.getUser()) {
System.out.println(user);
// 插入数据库
// userMapper.insert(user);
}
for (Ces ces : users.getCes()) {
System.out.println(ces);
// 插入数据库
// userMapper.insert(user);
}
}
}
Controller
@RestController
public class SjcjXML {
@Autowired
private UserService userService;
//xml解析
@PostMapping("/import-users")
public String importUsers(@RequestParam("file") MultipartFile file) {
try {
File tempFile = Files.createTempFile("upload", ".xml").toFile();
Files.copy(file.getInputStream(), tempFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
userService.importUsersFromXml(tempFile);
return "Import successful";
} catch (IOException | JAXBException e) {
e.printStackTrace();
return "Import failed: " + e.getMessage();
}
}
}
1283

被折叠的 条评论
为什么被折叠?



