您的位置:首页 > 其它

使用webservice 并通过sax动态解析xml

2011-05-26 23:47 375 查看
1.HttpGet方式:

List<String> list = null;
String url = "http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx/getRegionProvince";
HttpGet get = new HttpGet(url);
try {
HttpResponse httpResponse = new DefaultHttpClient().execute(get);
int responseCode = httpResponse.getStatusLine().getStatusCode();
if (responseCode == 200) {
HttpEntity entity = httpResponse.getEntity();
String result = EntityUtils.toString(entit
adcc
y);
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
WeatherHandler wh = new WeatherHandler();
xr.setContentHandler(wh);
StringReader reader = new StringReader(result);
InputSource is = new InputSource(reader);
xr.parse(is);
this.listProvince = wh.getList();
return list;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


首先定义一个url,访问这个url可以获得到xml

声明一个HttpGet,使用DefaultHttpClient获取HttpClient,发送HttpGet请求。得到一个HttpResponse。

取得response的status后,判断是否正常返回。

从response中获取返回的entity,利用entityutils将其转换为string。

下面就可以开始解析xml了

 

声明一个SAXParserFactory,使用newInstance获得一个SAXParserFactory类的对象

然后用这个factory获得一个SAXParser。使用XMLReader读取XML。这里需要定义一个继承自DefaultHandler类的类。

覆写DefaultHandler类的方法。我们利用这个类来解析XML。在XMLReader中绑定这个类(contentHandler)。

将需要解析的xml转换为inputSource:

StringReader sr = new StringReader(str);

InputSource is = new InputSource(sr);

使用XMLReader进行解析:parse。

 

2.HttpPost方式

与上面的方法基本一致,只是请求的参数不能通过?&进行传递,需要封装在NameValuePair中,然后通过request.setEntity对其进行编码即可。

如下:

List<NameValuePair> params = new ArrayList<NameValuePair>();

httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息