2

私は現在、代謝物データベース PubChem からデータを要求する必要があるプロジェクトを行っています。Apache の HttpClient を使用しています。私は次のことをしています:

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 ファイル全体をストリーミングすることです。

<?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">

私が望むのは、たとえば、PubChem ID を要求すると、その ID に対応する値が貼り付けられることです。これはネイティブ Java メソッドで実行できることがわかりましたが、これには HttpClient を使用する必要があります。ネイティブ Java では、次のように実行されます。

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 でも動作します)

だから、誰かが私を助けることができれば、それは素晴らしいことです:)

4

2 に答える 2

1

これを行うには複数の方法があります。

応答を Bean に変換したいが、応答の構造が変更されるとは思わない場合は、XStream の使用を検討します。もう 1 つのオプションは、SAX パーサーを直接使用することです。

もちろん、迅速かつ汚いアプローチは、応答コンテンツを bufferedReader に変換することです。次に、そのリーダーを使用している XMLReader にフィードします。

上記のコードを使用した例は次のとおりです。

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 Web サービス クライアントまたは XMLReaders をグーグルで検索すると、この件に関するより多くの情報が得られるはずです。

于 2012-07-01T12:48:31.103 に答える
0

NameValuePairを使用してみてください

例:

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);
于 2012-07-01T12:10:31.080 に答える