当前位置: 移动技术网 > IT编程>网页制作>CSS > 如何从xml文件中批量读取数据?

如何从xml文件中批量读取数据?

2018年03月07日  | 移动技术网IT编程  | 我要评论

新利假冒ued,殷秀梅的老公,公务员面试时间

假设有一个User.xml文件,其内容如下:



    
        1
        lzj
        28
    
    
        2
        Tom
        20
    
    
        3
        Jerry
        18
    
    
        4
        Jerry
        18
    
    
        5
        Bob
        25
    
    
        5
        Ferry
        30
    
    
        6
        Marry
        39
    
    
        7
        Linda
        20
    
    
        8
        Linda
        23
    
    
        9
        Jiken
        15
    
    ……

如果这个文件足够大,现在要在批处理程序中批量读取,首先建立对应的java bean

//@XmlRootElement(name = "user") //指定根元素
public class User implements Serializable{

    private String id;
    private String name;
    private String age;
    //省略set、get、toString方法
}

批处理程序程序如下:

@Configuration
public class BatchConfig {

    @Autowired
    private StepBuilderFactory stepBuilderFactory;

    @Autowired
    private JobBuilderFactory jobBuilderFactory;

    @Value("${spring.batch.chunk.size:3}")
    private int chunkSize;

    /*1、创建一个Job作业*/
    @Bean
    public Job xmlReaderJob(){
        return jobBuilderFactory.get("xmlReaderJob")
        .start(chunkStep())
        .build();
    }

    //2、创建一个step*/
    @Bean
    public Step chunkStep(){
        return stepBuilderFactory.get("chunkStep")
                .chunk(chunkSize)                                   //每chunkSize次提交一次
                .reader(xmlItemReader())                            //读取xml文件,并把文件中每个标签中数据映射到工程中的User bean中
                .writer(list -> list.forEach(System.out::println))
                .allowStartIfComplete(true)
                .build();
    }

    //3、配置要读取文件的特性*/
    @Bean
    public ItemReader xmlItemReader(){
        StaxEventItemReader reader = new StaxEventItemReader<>(); //StaxEventItemReader用来读取xml文件
        reader.setResource(new ClassPathResource("/data/User.xml"));    //设置xml文件位置
        reader.setFragmentRootElementName("user");  //指定xml文件的根元素,或者在User.java类上用@XmlRootElement(name = "user")
        reader.setUnmarshaller(getMarShaller());    //把xml文件中数据映射到User.java中
//      reader.setUnmarshaller(getJaxbMarShaller()); //未实现
        return reader;
    }

    private Jaxb2Marshaller getJaxbMarShaller(){
        Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
        marshaller.setClassesToBeBound(User.class);
        return marshaller;
    }

    private XStreamMarshaller getMarShaller(){
        XStreamMarshaller marShaller = new XStreamMarshaller();
        Map map = new HashMap<>();
        map.put("user", User.class); //把标签中数据映射到User.class类中
        marShaller.setAliases(map);
        return marShaller;
    }

}

程序中应用到了把xml转化为java bean的技术,需要将spring-oxm包,需导入工程中

        
            org.springframework
            spring-oxm
        

运行批处理程序,会打印出如下结果:

……
User [id=1, name=lzj, age=28]
User [id=2, name=Tom, age=20]
User [id=3, name=Jerry, age=18]
User [id=4, name=Jerry, age=18]
User [id=5, name=Bob, age=25]
User [id=5, name=Ferry, age=30]
User [id=6, name=Marry, age=39]
User [id=7, name=Linda, age=20]
User [id=8, name=Linda, age=23]
User [id=9, name=Jiken, age=15]
……

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网