如何从xml文件中批量读取数据?
程序员文章站
2022-08-10 12:14:27
假设有一个User.xml文件,其内容如下:
1
lzj
28...
假设有一个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] ……
上一篇: 浏览器兼容性问题汇总,并附解决方法
下一篇: 嘴长得太长就像你啰嗦