java后端实现XML文件解析并入库

首先引入依赖
<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();
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值