您的位置:首页 > 其它

采用DOM4J中的SAXReader解析webservice返回的XML文件

2011-12-16 14:30 525 查看
1. 通过URL连接GET返回的webservice内容,如下代码:

String str = FORECAST_WEATHER_URL + this.getPYName(exter.getCity_code());
log.info("天气预报查询str is " + str);
URL url = new URL(str);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setConnectTimeout(15000);
conn.setReadTimeout(15000);
conn.setRequestMethod("GET");
InputStream in = conn.getInputStream();

//			FileInputStream in = new FileInputStream(new File("d:/weather.xml"));

byte[] bytes = IoUtil.InputStreamToByte(in);
InputStream inputStream = new ByteArrayInputStream(bytes);
InputStreamReader strInStream = new InputStreamReader(inputStream, "GBK");

SAXReader reader = new SAXReader();
//			reader.setEncoding("UTF-8");
Document doc = reader.read(strInStream);
//进行当天天气预报的查询
List currentList = XMLParseUtil.getParseMapFromXMLStream(doc,XMLPathConstants.CURRENT_WEATHER_XPATH);
//进行未来天气预报的查询
List forecastList = XMLParseUtil.getParseMapFromXMLStream(doc,XMLPathConstants.FORECAST_WEATHER_XPATH);


public final static String CURRENT_WEATHER_XPATH = "//xml_api_reply/weather/current_conditions";
public final static String FORECAST_WEATHER_XPATH = "//xml_api_reply/weather/forecast_conditions";


2. 通过如下的方法解析XML中的内容

public static List getParseMapFromXMLStream(Document doc,String parentPath) throws DocumentException {

List rowList = doc.selectNodes(parentPath);
Map map = null;
List list = null;
if(rowList != null && rowList.size() >0) {
map = new HashMap();
list = new ArrayList();
for(Iterator iter = rowList.iterator();iter.hasNext();){
//获得具体的节点的父元素
Element element = (Element)iter.next();
//获得具体的节点的父元素的属性
//	            List elementList = element.attributes();
//	            for(Iterator iter1 = elementList.iterator();iter1.hasNext();){
//	                //将每个属性转化为一个抽象属性,然后获取其名字和值
//	                AbstractAttribute aa = (AbstractAttribute)iter1.next();
//	                System.out.println("Name:"+aa.getName()+";Value:"+aa.getValue());
//	            }
//				如果element下有子元素,(类似width="**"),要想获得该子元素的值,可以用如下方法
//				System.out.println(element.elementText("test"));

//获得父节点内的各种借点或者属性
Iterator it1 = element.elementIterator();
while(it1.hasNext()) {
Element element1 = (Element)it1.next();
//获得子节点的所有列表
List elementList1 = element1.attributes();
for(Iterator it2 = elementList1.iterator();it2.hasNext();){
//将每个属性转化为一个抽象属性,然后获取其名字和值
AbstractAttribute aa = (AbstractAttribute)it2.next();
//		                System.out.println("Name11:"+aa.getName()+";Value11:"+aa.getValue());
//这边需要添加借点的名字为KEY的值(重要)
map.put(element1.getName(), aa.getValue());
}
}
list.add(map);
}
}
return list;
}


3. 获取的XML内容为:

<?xml version="1.0"?>
<xml_api_reply version="1">
<weather module_id="0" tab_id="0" mobile_row="0" mobile_zipped="1" row="0" section="0" >
<forecast_information>
<city data="Xiamen, Fujian"/>
<postal_code data="Xiamen"/>
<latitude_e6 data=""/>
<longitude_e6 data=""/>
<forecast_date data="2011-12-15"/>
<current_date_time data="2011-12-15 16:00:00 +0000"/>
<unit_system data="SI"/>
</forecast_information>

<current_conditions>
<condition data="多云"/>
<temp_f data="64"/><temp_c data="18"/>
<humidity data="湿度: 68%"/>
<icon data="/ig/images/weather/mostly_cloudy.gif"/>
<wind_condition data="风向: 东北、风速:5 米/秒"/>
</current_conditions>

<forecast_conditions>
<test>测试用的</test>
<day_of_week data="周四"/>
<low data="13"/><high data="22"/>
<icon data="/ig/images/weather/mostly_sunny.gif"/>
<condition data="以晴为主"/>
</forecast_conditions>

<forecast_conditions>
<day_of_week data="周五"/>
<low data="11"/><high data="16"/>
<icon data="/ig/images/weather/mostly_sunny.gif"/>
<condition data="以晴为主"/>
</forecast_conditions>

<forecast_conditions>
<day_of_week data="周六"/>
<low data="11"/><high data="18"/>
<icon data="/ig/images/weather/mostly_sunny.gif"/>
<condition data="以晴为主"/>
</forecast_conditions>

<forecast_conditions>
<day_of_week data="周日"/>
<low data="14"/><high data="21"/>
<icon data="/ig/images/weather/mostly_sunny.gif"/>
<condition data="以晴为主"/>
</forecast_conditions>
</weather>
</xml_api_reply>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: