Get方式请求并获取XML数据格式

本文介绍如何使用GET方法从服务器请求XML数据,并解析及处理响应内容。
package cn.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;

import cn.utils.xmlUtils;

public class WriteResponse2XML{
	public static void main(String[] args) throws
		URISyntaxException, ClientProtocolException, IOException, DocumentException{
		//Get请求的参数
		final String URL = "http://search.ifeng.com/searchxml";
		final String PARAM = "q=三星&df=2013-7-1&n=3";
		
		//XML文件输出的位置
		final String FILE_PATH = "./XML/response.xml";
		
		//初始化log4j
		Logger log = Logger.getLogger(WriteResponse2XML.class);
		PropertyConfigurator.configure("./conf/log4j.properties");
		
		HttpClient httpClient = new DefaultHttpClient();
		//Get请求
		HttpGet httpGet = new HttpGet(URL);
		//拼装字符串
		httpGet.setURI(new URI(httpGet.getURI().toString()+"?"+PARAM));
		//System.out.println(new URI(httpGet.getURI().toString()));
		//发请求
		HttpResponse response = httpClient.execute(httpGet);
		if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
			HttpEntity entity = response.getEntity();
			BufferedReader br = new BufferedReader(new InputStreamReader(entity.getContent(),"UTF-8"));
			
			//将获取的response写入到xml文件中(不是必要步骤)
			Document document = xmlUtils.getDocument(br);
			xmlUtils.document2XML(document, FILE_PATH);
			//解析XML文件,并验证其中的关键值
			Element rootElement = document.getRootElement();
			//获取list节点,验证参数n是否正确
			List<Element> list = rootElement.elements("item");
			if(3 == list.size()) {
				log.info("请求中参数n=3,也就是每页有3条记录。实际返回的response中也是每页有3条记录。");
			}else {
				log.info("请求中参数n=3,也就是每页有3条记录。实际返回的response中也是每页有"+list.size()+"条记录,与请求参数不符");
			}
			for(int i=0; i<list.size(); i++) {
				String title = list.get(i).element("Doc_Title").getText();
				//System.out.println(title);
				//验证参数q是否正确,q是查找的关键字
				if(title.contains("三星")) {
					log.info("请求中参数q=三星,也就查找的关键字。实际返回的第"+(i+1)+"条记录中包含该关键字。");
				}else {
					log.info("第"+(i+1)+"条记录中没有包含该关键字");
				}
			}
			
		}else {
			log.error("请求失败,状态码为:"+response.getStatusLine().getStatusCode());
		}
		httpClient.getConnectionManager().shutdown();
	}
}

返回的response

<?xml version="1.0" encoding="UTF-8"?>
<list> 
  <numFound>34,161</numFound>  
  <max_page>11,387</max_page>  
  <QTime>343</QTime>  
  <item> 
    <Doc_Date><![CDATA[2012-03-21]]></Doc_Date>  
    <Doc_Title><![CDATA[宁波三星电气股份有限公司关于重大经营合同中标的提示性公告]]></Doc_Title>  
    <Doc_Url><![CDATA[http://finance.ifeng.com/roll/20120321/5779454.shtml]]></Doc_Url> 
  </item>  
  <item> 
    <Doc_Date><![CDATA[2012-03-21]]></Doc_Date>  
    <Doc_Title><![CDATA[时尚潮流造型 小巧安卓机 三星I579再爆新低]]></Doc_Title>  
    <Doc_Url><![CDATA[http://tech.ifeng.com/digi/mobile/price/detail_2012_03/21/13329289_0.shtml]]></Doc_Url> 
  </item>  
  <item> 
    <Doc_Date><![CDATA[2012-03-21]]></Doc_Date>  
    <Doc_Title><![CDATA[ST三星:独立董事关于控股股东及其他关联方占用资金情况的说明及独立意见]]></Doc_Title>  
    <Doc_Url><![CDATA[http://finance.ifeng.com/stock/gsgg/20120321/5777632.shtml]]></Doc_Url> 
  </item> 
</list>


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值