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>

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

被折叠的 条评论
为什么被折叠?



