java注解XML
用的是 jdk 自带的 javax.xml.bind.JAXBContext 将对象和 xml 字符串进行相互转换。
比较常用的几个:
@XmlRootElement:根节点
@XmlAttribute:该属性作为 xml 的 attribute
@XmlElement:该属性作为 xml 的 element,且可以增加属性 (name="NewElementName"),那么生成的 xml 串的 elment 的标签是 NewElementName
首先,java 注解读取 XML。
一、新建 school.xml 文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <SCHOOL> <name>延边大学</name> <address>吉林延吉市</address> <student grade="1"> <num>001</num> <name>小杜</name> <age>23</age> </student> <student grade="2"> <num>002</num> <name>小张</name> <age>21</age> </student> </SCHOOL>
二、根据配置文件书写对应的注解类。
编写 Student 基类,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | package com.cvicse.ump.xml.school; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; public class Student { private String studentNum; private String studentName; private String studentGrade; private int age; @XmlElement (name= "num" ) public String getStudentNum() { return studentNum; } public void setStudentNum(String studentNum) { this .studentNum = studentNum; } @XmlElement (name= "name" ) public String getStudentName() { return studentName; } public void setStudentName(String studentName) { this .studentName = studentName; } @XmlAttribute (name= "grade" ) public String getStudentGrade() { return studentGrade; } public void setStudentGrade(String studentGrade) { this .studentGrade = studentGrade; } @XmlElement public int getAge() { return age; } public void setAge( int age) { this .age = age; } @Override public String toString() { return "Student [studentNum=" + studentNum + ", studentName=" + studentName + ", studentGrade=" + studentGrade + ", age=" + age + "]" ; } } |
编写基类 school,内容如下:
package com.cvicse.ump.xml.school;import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;@XmlRootElement(name="SCHOOL")
public class School {</span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String name; </span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String address; </span><span style="color: rgba(0, 0, 255, 1)">private</span> List<Student><span style="color: rgba(0, 0, 0, 1)">students; @XmlElement </span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String getName() { </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> name; } </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> setName(String name) { </span><span style="color: rgba(0, 0, 255, 1)">this</span>.name =<span style="color: rgba(0, 0, 0, 1)"> name; } @XmlElement </span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String getAddress() { </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> address; } </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> setAddress(String address) { </span><span style="color: rgba(0, 0, 255, 1)">this</span>.address =<span style="color: rgba(0, 0, 0, 1)"> address; } @XmlElement(name</span>="student"<span style="color: rgba(0, 0, 0, 1)">) </span><span style="color: rgba(0, 0, 255, 1)">public</span> List<Student><span style="color: rgba(0, 0, 0, 1)"> getStudents() { </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> students; } </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> setStudents(List<Student><span style="color: rgba(0, 0, 0, 1)"> students) { </span><span style="color: rgba(0, 0, 255, 1)">this</span>.students =<span style="color: rgba(0, 0, 0, 1)"> students; } @Override </span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String toString() { </span><span style="color: rgba(0, 0, 255, 1)">return</span> "School [name=" + name + ", address=" + address + "]"<span style="color: rgba(0, 0, 0, 1)">; }
}
编写 XML 读取程序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | package com.cvicse.ump.xml.school; import java.io.File; import java.util.List; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; public class SchoolRead { public static void main(String[] args) { File file = new File( "src/school.xml" ); try { JAXBContext context = JAXBContext.newInstance(School. class ); Unmarshaller unMar = context.createUnmarshaller(); School school = (School) unMar.unmarshal(file); System.out.println(school); List<Student>students = school.getStudents(); for (Student student:students){ System.out.println(student); } } catch (JAXBException e) { e.printStackTrace(); } } } |
编写写入文件程,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | package com.cvicse.ump.xml.school; import java.util.ArrayList; import java.util.List; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; public class SchoolWrite { public static void main(String[] args) { School school = new School(); school.setName( "实验小学" ); school.setAddress( "山东济南市" ); List<Student> students = new ArrayList<Student>(); Student student1 = new Student(); student1.setStudentNum( "001" ); student1.setStudentName( "xiaoDy" ); student1.setAge( 25 ); student1.setStudentGrade( "1" ); Student student2 = new Student(); student2.setStudentNum( "002" ); student2.setStudentName( "xiaoWf" ); student2.setAge( 22 ); student2.setStudentGrade( "2" ); students.add(student1); students.add(student2); school.setStudents(students); try { JAXBContext context = JAXBContext.newInstance(School. class ); Marshaller mar = context.createMarshaller(); mar.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true ); mar.setProperty(Marshaller.JAXB_ENCODING, "UTF-8" ); mar.marshal(school, System.out); } catch (JAXBException e) { e.printStackTrace(); } } } |
源码下载:https://yunpan.cn/cxDZgKQbeDLqt (提取码:68e1)
参考网址:http://blog.csdn.net/lhzjj/article/details/11796713