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&lt;Student&gt;<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&lt;Student&gt;<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&lt;Student&gt;<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