JAXB解析xml

大家知道xml常用的解析方式有DOM, SAX, StAX三种.如果使用这几种中的一种解析, 显然还是比较麻烦的. 可以使用JAXB(Java Architecture for XML Binding) Person public class Person implements Serializable { private String name; private Integer age; private char sex; public Person() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public char getSex() { return sex; } public void setSex(char sex) { this.sex = sex; } } @XmlRootElement(name = "persons") public class Persons extends ArrayList<Person> { // 泛化, 聚合 @XmlElement(name = "person") public List<Person> getPersons() { return this; } } 写xml public static void main(String[] args) { try { // javax.xml.bind.JAXBException: class com.fjh658.pojo.Persons nor // any of its super class is known to this context. JAXBContext cxt = JAXBContext.newInstance(Persons.class); Marshaller marshaller = cxt.createMarshaller(); Persons persons = new Persons(); for (int i = 0; i < 50; i++) { Person p = new Person(); p.setName("zhangsan" + i); p.setAge(20 + i); p.setSex('1'); persons.add(p); } marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");// 编码格式 marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);// 是否格式化生成的xml串 marshaller.setProperty(Marshaller.JAXB_FRAGMENT, false);// 默认false表示xml指令存在 // marshaller.marshal(persons, System.out); marshaller.marshal(persons, new File("./test.xml")); } catch (JAXBException e) { e.printStackTrace(); } } 读xml public class ReadTest { public static void main(String[] args) { try { JAXBContext cxt = JAXBContext.newInstance(Persons.class); Unmarshaller unmarshaller = cxt.createUnmarshaller(); List<Person> persons = (List<Person>) unmarshaller.unmarshal(new File("./test.xml")); if (persons != null) { for (Person p : persons) { if (p != null) { System.out.println(p.getName()); } } } } catch (JAXBException e) { e.printStackTrace(); } } }

你可能感兴趣的:(xml,JAXB,String,Integer,Class,binding)