我正在尝试下载期刊文章记录的 XML 文件并创建一个数据集以在 R 中进一步审讯。我对 XML 完全陌生,并且在 R 中非常新手。我使用来自 2 个来源的代码拼凑了一些代码: GoogleScholarXScraper 和 从 pubMed 中提取记录
library(RCurl)
library(XML)
library(stringr)
#Search terms
SearchString<-"cancer+small+cell+non+lung+survival+plastic"
mySearch<-str_c("http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=",SearchString,"&usehistory=y",sep="",collapse=NULL)
#Seach
pub.esearch<-getURL(mySearch)
#Extract QueryKey and WebEnv
pub.esearch<-xmlTreeParse(pub.esearch,asText=TRUE)
key<-as.numeric(xmlValue(pub.esearch[["doc"]][["eSearchResult"]][["QueryKey"]]))
env<-xmlValue(pub.esearch[["doc"]][["eSearchResult"]][["WebEnv"]])
#Fetch Records
myFetch<-str_c("http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&WebEnv=",env,"&retmode=xml&query_key=",key)
pub.efetch<-getURL(myFetch)
myxml<-xmlTreeParse(pub.efetch,asText=TRUE,useInternalNodes=TRUE)
#Create dataset of article characteristics #This doesn't work
pub.data<-NULL
pub.data<-data.frame(
journal <- xpathSApply(myxml,"//PubmedArticle/MedlineCitation/MedlineJournalInfo/MedlineTA", xmlValue),
abstract<- xpathSApply(myxml,"//PubmedArticle/MedlineCitation/Article/Abstract/AbstractText",xmlValue),
affiliation<-xpathSApply(myxml,"//PubmedArticle/MedlineCitation/Article/Affiliation", xmlValue),
year<-xpathSApply(myxml,"//PubmedArticle/MedlineCitation/Article/Journal/JournalIssue/PubDate/Year", xmlValue)
,stringsAsFactors=FALSE)
我似乎遇到的主要问题是我返回的 XML 文件的结构不完全统一。例如,一些引用具有这样的节点结构:
- <Abstract>
<AbstractText>The Wilms' tumor gene... </AbstractText>
虽然有些有标签并且是这样的
- <Abstract>
<AbstractText Label="BACKGROUND & AIMS" NlmCategory="OBJECTIVE">Some background text.</AbstractText>
<AbstractText Label="METHODS" NlmCategory="METHODS"> Some text on methods.</AbstractText>
当我提取“AbstactText”时,我希望能取回 24 行数据(今天运行此组合搜索时有 24 条记录),但 xpathSApply 将“AbstactText”中的所有标签作为我的数据框的单个元素返回。有没有办法在这个实例中折叠 XML 结构/忽略标签?当在路径末尾找不到任何内容时,有没有办法让 xpathSApply 返回“NA”?我知道 xmlToDataFrame,这听起来应该符合要求,但每当我尝试使用它时,它似乎并没有给我任何明智的选择。
谢谢你的帮助