2

DownloadDataからの方法を試していWebClientます。私の現在の問題は、このページから生成された結果 ( 、 、)変換ASCIIする方法&lt;<理解できなかったことです。\n&gt;>Encoding.ASCII.GetString(myDataBuffer);

ページソース
(出典: iforce.co.nz )

    /// <summary>
    /// Curl data from the PMID
    /// </summary>
    private void ClientPMID(int pmid)
    {
        //generate the URL for the client
        StringBuilder pmid_url_string = new StringBuilder();
        pmid_url_string.Append("http://www.ncbi.nlm.nih.gov/pubmed/").Append(pmid.ToString()).Append("?report=xml");
        Uri PMIDUri = new Uri(pmid_url_string.ToString());
        //declare and initialize the client
        WebClient client = new WebClient();
        // Download the Web resource and save it into a data buffer. 
        byte[] myDataBuffer = client.DownloadData(PMIDUri);
        this.DownloadCompleted(myDataBuffer);
    }
    /// <summary>
    /// Crawl over the binary from myDataBuffer
    /// </summary>
    /// <param name="myDataBuffer">Binary Buffer</param>
    private void DownloadCompleted(byte[] myDataBuffer)
    {
        string download = Encoding.ASCII.GetString(myDataBuffer);
        PMIDCrawler pmc = new PMIDCrawler(download, "/pre/PubmedArticle/MedlineCitation/Article");
        //iterate over each node in the file
        foreach (XmlNode xmlNode in pmc.crawl)
        {
            string AbstractTitle = xmlNode["ArticleTitle"].InnerText;
            string AbstractText = xmlNode["Abstract"]["AbstractText"].InnerText;
        }
    }

PMIDCrawler のコードは、DownloadStringCompletedEventHandler. からの出力string html = HttpUtility.HtmlDecode(nHtml);は有効なHTML (または XML)ではありませんが(http ヘッダーに応答しないためxml)、 からコンテンツを受け取った後はEncoding.ASCII.GetString.

4

1 に答える 1

2

残念ながら、このサーバーは正しく応答しないAccept: text/xmlAccept: application/xml、難しい方法でこれを行う必要があります ( HttpUtility )

string download = HttpUtility.HtmlDecode(Encoding.ASCII.GetString(myDataBuffer));

(または.NET Fx 4.5+ では WebUtility.Decode )

また

string download = Encoding.ASCII.GetString(myDataBuffer);
if (download != null) { // this won't get all HTML escaped characters...
    download = download.Replace("&lt;", "<").Replace("&gt;", ">");
}

詳細については、この質問も参照してください。

于 2013-03-13T03:13:21.040 に答える