首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java中使用httpClient对xml文件的各个部分进行过滤

如何在Java中使用httpClient对xml文件的各个部分进行过滤
EN

Stack Overflow用户
提问于 2012-07-01 20:01:05
回答 2查看 911关注 0票数 2

我目前正在做一个项目,在这个项目中,我必须从代谢物数据库PubChem请求数据。我正在使用阿帕奇的HttpClient。我正在做以下工作:

代码语言:javascript
复制
HttpClient httpclient = new DefaultHttpClient();
HttpGet pubChemRequest = new HttpGet("http://pubchem.ncbi.nlm.nih.gov/summary/summary.cgi?cid="
    + cid + "&disopt=SaveXML");
pubChemRequest.getAllHeaders();
System.out.println(pubChemRequest);
HttpResponse response = null;
response = httpclient.execute(pubChemRequest);
HttpEntity entity = response.getEntity();
pubChemInchi = EntityUtils.toString(entity);

问题是这段代码会流式传输整个XML文件:

代码语言:javascript
复制
<?xml version="1.0"?>
<PC-Compound
xmlns="http://www.ncbi.nlm.nih.gov"
xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xs:schemaLocation="http://www.ncbi.nlm.nih.gov ftp://ftp.ncbi.nlm.nih.gov/pubchem/specifications/pubchem.xsd">

等。

我想要的是,例如,我可以请求Java,它将粘贴与该ID相对应的值。我发现可以使用原生PubChem方法来实现这一点,但我需要使用HttpClient。对于原生Java,它的实现方式如下:

代码语言:javascript
复制
cid = 5282253
reader = new PCCompoundXMLReader(
new URL("http://pubchem.ncbi.nlm.nih.gov/summary/summary.cgi?cid=" + cid + "&disopt=SaveXML").newInputStream())
mol = reader.read(new NNMolecule())
println "CID: " + mol.getProperty("PubChem CID")

(注意:这段代码是用Groovy编写的,但经过一些调整后也可以在Java中运行)

所以,如果有人能帮我,那就太好了:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-01 20:48:31

有多种方法可以做到这一点。

如果您希望将响应转换为bean,并且不期望响应的结构发生变化,那么我将考虑使用XStream。另一种选择是直接使用SAX解析器。

当然,最快捷的方法是将您的响应内容转换为bufferedReader。然后将该阅读器输入您正在使用的XMLReader。

使用上述代码的示例如下:

代码语言:javascript
复制
HttpClient httpclient = new DefaultHttpClient();
HttpGet pubChemRequest = new HttpGet("http://pubchem.ncbi.nlm.nih.gov/summary/summary.cgi?cid="
    + cid + "&disopt=SaveXML");
pubChemRequest.getAllHeaders();
System.out.println(pubChemRequest);
HttpResponse response = null;
response = httpclient.execute(pubChemRequest);
BufferedReader br = new BufferedReader(new InputStreamReader((response.getEntity().getContent())));
cid = 5282253
reader = new PCCompoundXMLReader(br)
mol = reader.read(new NNMolecule())
println "CID: " + mol.getProperty("PubChem CID")

通过谷歌搜索RESTful for服务客户端或XMLReaders,可以获得有关此主题的更多信息

票数 1
EN

Stack Overflow用户

发布于 2012-07-01 20:10:31

尝试使用NameValuePair

例如:

代码语言:javascript
复制
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);

nameValuePairs.add(new BasicNameValuePair("username", user123));

nameValuePairs.add(new BasicNameValuePair("password", pass123));

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

HttpResponse response = httpclient.execute(httppost);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11281775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档