<?xml version="1.0" encoding="UTF-8"?>
<c c1="0">
<d d1="101280101" d2="广州" d3="guangzhou" d4="广东"/>
<d d1="101280102" d2="番禺" d3="panyu" d4="广东"/>
<d d1="101280103" d2="从化" d3="conghua" d4="广东"/>
...
</c>
编写xml文件的映射实体类
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="d")//city映射xml文件中的d节点
@XmlAccessorType(XmlAccessType.FIELD)//访问每一个属性
public class City {
/**
* java类与xml文件的映射不用名字相同
*/
@XmlAttribute(name="d1")
private String cityId;
@XmlAttribute(name="d2")
private String cityName;
@XmlAttribute(name="d3")
private String cityCode;
@XmlAttribute(name="d4")
private String province;
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;
@XmlRootElement(name="c")//city映射xml文件中的c节点
@XmlAccessorType(XmlAccessType.FIELD)//访问每一个子节点
public class CityList {
@XmlElement(name="d")
private List<City> cityList;
工具类:使用JAXB的API把xml文件中的数据读取出来,然后转换为Object
import java.io.Reader;
import java.io.StringReader;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
/**
* 工具类,把xml文件中的数据读取出来,然后转换为Object
* @author czw
*
*/
public class XmlBuilder {
public static Object xmlStrToObject(Class<?> clazz,String xmlStr) throws Exception
{
Object obj=null;
//1.读取xml文件
Reader reader=null;
//jaxb API
//上下文
JAXBContext context=JAXBContext.newInstance(clazz);
//调用xml转换成对象的接口
Unmarshaller un=context.createUnmarshaller();
//实例化Reader
reader=new StringReader(xmlStr);
/*
* 核心代码:把xml字符串转换成java Object
* 2.把xml字符串转换为java Object:整个文件是一个字符串--》CityList
*/
obj=un.unmarshal(reader);
if(null!=reader)
{
reader.close();
}
return obj;
}
定义获取所有城市数据的service(获取xml文件c节点下所有的d节点)
1.读取xml文件
2.把xml文件内容读入缓冲区
3.调用xml转换Object工具类的方法获取所有城市数据
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.List;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Service;
import com.abc.weather.service.ifac.CityDataServiceIfac;
import com.abc.weather.util.XmlBuilder;
import com.abc.weather.vo.City;
import com.abc.weather.vo.CityList;
@Service
public class CityDataServiceImpl implements CityDataServiceIfac{
@Override
public List<City> listCity() throws Exception {
// 1.读取xml文件
Resource resource=new ClassPathResource("citylist.xml");
BufferedReader br=new BufferedReader(new InputStreamReader(resource.getInputStream()));
StringBuffer buffer=new StringBuffer();
String line="";
//2.把xml文件内容读入缓冲区
while((line=br.readLine())!=null)
{
buffer.append(line);
}
br.close();
//3.调用xml转换Object工具类的方法获取所有城市数据
CityList cityList=(CityList) XmlBuilder.xmlStrToObject(CityList.class, buffer.toString());
return cityList.getCityList();
}
}