JAXB把xml字符串轉換成java對象(xml屬性映射問題)

xml:

<?xml version="1.0" encoding="utf-8"?>
<myDocument>
    <desc>sky</desc>
    <myPerson>
        <person name="sky1" age="18"/>
        <person name="sky2" age="19"/>
    </myPerson>
</myDocument>
  1. 定義好各個xml元素對應的javabean,在類上加註解@XmlRootElement(name = “xxx”)
  2. 在各個子元素對應的java字段上(如desc、myPerson)加註解 @XmlElement(name = “xxx”)
  3. 其中person的xml標籤比較特殊,具有name和age這2個屬性,需要做特殊處理:不能直接在name字段上加註解,而是需要先建立set或者get方法,在方法上加註解@XmlAttribute(name = “xxx”)
@XmlRootElement(name = "myDocument")
class MyDocument{
    @XmlElement(name = "desc")
    private String desc;
    @XmlElement(name = "myPerson")
    private MyPerson myPerson;
}
@XmlRootElement(name = "person")
class Person{
    private String name;
    private int age;
    @XmlAttribute(name = "name")
    public void setName(String name) {
        this.name = name;
    }
    @XmlAttribute(name = "age")
    public void setAge(int age) {
        this.age = age;
    }
}
@XmlRootElement(name = "myPerson")
class MyPerson{
    @XmlElement(name = "person")
    private List<Person> person;
}
public class TestXml {

    public static void main(String[] args) throws Exception{

        String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
                "<myDocument>\n" +
                "    <desc>sky</desc>\n" +
                "    <myPerson>\n" +
                "        <person name=\"sky1\" age=\"18\"/>\n" +
                "        <person name=\"sky2\" age=\"19\"/>\n" +
                "    </myPerson>\n" +
                "</myDocument>";

        JAXBContext context = JAXBContext.newInstance(MyDocument.class);
        Unmarshaller unmarshaller = context.createUnmarshaller();
        StringReader sr = new StringReader(xml);
        MyDocument myDocument = (MyDocument) unmarshaller.unmarshal(sr);
        System.out.println(myDocument);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章