1. JAXB(Java Architecture for XML Binding简称JAXB)允许
Java开发人员将Java
类映射为
XML表示方式。JAXB提供两种主要特性:将一个Java
对象
序列化为XML,以及反向操作,将XML解析成Java对象。换句话说,JAXB允许以XML格式存储和读取数据,而不需要程序的类结构实现特定的读取XML和保存XML的代码。
3) 解析
2. 由XML解释为Java对象的步骤大致分为以下几步:
1)创建可映射的Java对象
package com.desmond.test.jaxb;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name = "address")
public class AddressVO {
@XmlElement(name = "country")
private String countryName;
@XmlElement(name = "state")
private String stateName;
@XmlElement(name = "city")
private List<CityVO> cityList;
public String getCountryName() {
return countryName;
}
public void setCountryName(String countryName) {
this.countryName = countryName;
}
public String getStateName() {
return stateName;
}
public void setStateName(String stateName) {
this.stateName = stateName;
}
public List<CityVO> getCityList() {
return cityList;
}
public void setCityList(List<CityVO> cityList) {
this.cityList = cityList;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder( "AddressVO [countryName=" + countryName + ", stateName="
+ stateName + ", cityName=");
for(CityVO city : cityList) {
sb.append(city.getCityName() + ", ");
}
return sb.toString();
}
}
2).创建符合XML语法规范的xml(address.xml)
<?xml version="1.0"?>
<address>
<country>Chinese</country>
<state>Hunan</state>
<city>
<name>Hengyang</name>
<city-resident>
<name>presley</name>
<age>100</age>
<job>developer</job>
</city-resident>
<city-resident>
<name>kenny</name>
<age>100</age>
<job>developer</job>
</city-resident>
</city>
<city>
<name>Changsha</name>
<city-resident>
<name>PenZhi</name>
<age>13</age>
<job>student</job>
</city-resident>
<city-resident>
<name>LiMM</name>
<age>18</age>
<job>student</job>
</city-resident>
</city>
</address>
3) 解析
URL url = AddressVO.class.getResource(DIR+"address.xml");
File file = FileUtils.toFile(url);
JAXBContext jc = null;
AddressVO addressVO = null;
try {
jc = JAXBContext.newInstance(AddressVO.class);
Unmarshaller unMarshaller = jc.createUnmarshaller();
addressVO = (AddressVO) unMarshaller.unmarshal(file);
List<CityVO> cityList = addressVO.getCityList();
for(CityVO c : cityList) {
outln(c);
}
} catch (JAXBException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}