2014-12-05 27 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

相关问题