JAXB解析xml

JAXB解析xml

分类: JavaSE   325人阅读  评论(1)  收藏  举报

[java]  view plain copy
  1. 大家知道xml常用的解析方式有DOM, SAX, StAX三种.如果使用这几种中的一种解析, 显然还是比较麻烦的.  
  2. 可以使用JAXB(Java Architecture for XML Binding)  
  3. Person  
  4. public class Person implements Serializable {  
  5.     private String name;  
  6.   
  7.     private Integer age;  
  8.   
  9.     private char sex;  
  10.   
  11.     public Person() {  
  12.     }  
  13.   
  14.     public String getName() {  
  15.         return name;  
  16.     }  
  17.   
  18.     public void setName(String name) {  
  19.         this.name = name;  
  20.     }  
  21.   
  22.     public Integer getAge() {  
  23.         return age;  
  24.     }  
  25.   
  26.     public void setAge(Integer age) {  
  27.         this.age = age;  
  28.     }  
  29.   
  30.     public char getSex() {  
  31.         return sex;  
  32.     }  
  33.   
  34.     public void setSex(char sex) {  
  35.         this.sex = sex;  
  36.     }  
  37.   
  38. }  
  39.   
  40. @XmlRootElement(name = "persons")  
  41. public class Persons extends ArrayList<Person> { // 泛化, 聚合  
  42.   
  43.     @XmlElement(name = "person")  
  44.     public List<Person> getPersons() {  
  45.         return this;  
  46.     }  
  47. }  
  48.   
  49. 写xml  
  50. public static void main(String[] args) {  
  51.         try {  
  52.             // javax.xml.bind.JAXBException: class com.fjh658.pojo.Persons nor  
  53.             // any of its super class is known to this context.  
  54.             JAXBContext cxt = JAXBContext.newInstance(Persons.class);  
  55.             Marshaller marshaller = cxt.createMarshaller();  
  56.   
  57.             Persons persons = new Persons();  
  58.             for (int i = 0; i < 50; i++) {  
  59.                 Person p = new Person();  
  60.                 p.setName("zhangsan" + i);  
  61.                 p.setAge(20 + i);  
  62.                 p.setSex('1');  
  63.   
  64.                 persons.add(p);  
  65.             }  
  66.             marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");// 编码格式  
  67.             marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);// 是否格式化生成的xml串  
  68.             marshaller.setProperty(Marshaller.JAXB_FRAGMENT, false);// 默认false表示xml指令存在  
  69.   
  70.             // marshaller.marshal(persons, System.out);  
  71.             marshaller.marshal(persons, new File("./test.xml"));  
  72.         } catch (JAXBException e) {  
  73.             e.printStackTrace();  
  74.         }  
  75.   
  76.     }  
  77.   
  78. 读xml  
  79. public class ReadTest {  
  80.   
  81.     public static void main(String[] args) {  
  82.         try {  
  83.             JAXBContext cxt = JAXBContext.newInstance(Persons.class);  
  84.             Unmarshaller unmarshaller = cxt.createUnmarshaller();  
  85.             List<Person> persons = (List<Person>) unmarshaller.unmarshal(new File("./test.xml"));  
  86.   
  87.             if (persons != null) {  
  88.                 for (Person p : persons) {  
  89.                     if (p != null) {  
  90.                         System.out.println(p.getName());  
  91.                     }  
  92.                 }  
  93.             }  
  94.         } catch (JAXBException e) {  
  95.             e.printStackTrace();  
  96.         }  
  97.   
  98.     }  
  99. }  

你可能感兴趣的:(xml,JAXB,String,null,JavaSE,encoding,output)