2014-12-05 39 views
0

我想獲得'summary_doc'但收到錯誤。我該怎麼辦。爲什麼我得到該錯誤:XML內容似乎不是XML

代碼如下


-------------------------------------------------------------- 
library(XML) 

base_url = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/" 

db = "pubmed" 

query = "human+genome+AND+2014" 

esearch = sprintf("esearch.fcgi?db=%s&term=%s",db,query) 

search_url = paste(base_url, esearch, sep="") 

search_doc = xmlParse(search_url) 

retmax = 9000 

new_esearch = sprintf("esearch.fcgi?db=%s&term=%s&retmax=%s",db,query,retmax) 

new_search_url= paste(base_url,new_esearch,sep='') 

new_search_doc = xmlParse(new_search_url) 

ids = xpathSApply(new_search_doc,path="//IdList/Id",fun='xmlValue') 

id_list = paste(ids, coppapse=',') 

esummary = sprintf("esummary.fcgi?db=%s&id=%s",db, id_list) 

sum_url = paste(base_url, esummary, sep='') 

summary_doc = xmlParse(sum_url) #this line makes error 

Error: XML content does not seem to be XML: 

回答

2

因此,有幾件事情會在這裏的。

首先,你拼寫錯誤collapse(!!)這會導致paste(...)產生垃圾。你甚至看到id_list ??

其次,即使你解決這個問題,你正試圖發出帶有含連接在一起差不多8400 8字符串查詢字符串的GET請求。這會產生414錯誤(請求URI太長)。所以處理這個問題的一種方法是製作多個更小的請求。雖然我不推薦。

這個查詢長度限制不適用於POST請求,所以你最好這樣做。請注意在httr包中使用GET(...)POST(...)。這些功能讓你避免了惱人的使用sprintf(...)構建查詢,並導致更可讀,可靠,重現性代碼。

library(XML) 
library(httr) 
url <- "http://eutils.ncbi.nlm.nih.gov" 
response <- GET(url,path="entrez/eutils/esearch.fcgi", 
       query=list(db="pubmed",term="human genome AND 2014",retmax=9000)) 
doc  <- content(response,type="text/xml") 
ids  <- sapply(doc["//IdList/Id"],xmlValue) 

result <- POST(url,path="entrez/eutils/esummary.fcgi",encode="form", 
       body=list(db="pubmed",id=paste(ids,collapse=","))) 
doc  <- content(result,type="text/xml") 
+0

謝謝你的回答。這對我真的很有幫助。 但有另一個問題。 問:我可以看到'doc'文件嗎? 還有一個我真的很感謝你的回答。 – user4329049 2014-12-06 13:08:40

相關問題