我试图从XML中的多个节点中提取多个属性数据集,但是只是试图从我的XML中提取任何属性数据。我想从" feature"中提取所有属性数据。节点在一起,但不断返回空列表。
到目前为止,我的代码基于这个答案: R XML select 2 attributes from a same node xmlAttrs()
然而,虽然示例代码(下面,底部)工作正常,并且XML格式看起来与我的数据和我的需求非常相似,但是适应我的数据的代码返回空列表(下面,顶部)。
##doesn't work
doc<- xmlParse("http://www.uniprot.org/uniprot/p05067.xml")
sapply(c("feature type", "description"), function(x) xpathSApply(doc, '/feature', xmlGetAttr, x))
#works
exdoc <- xmlParse("http://www.plosone.org/article/fetchObjectAttachment.action?uri=info%3Adoi%2F10.1371%2Fjournal.pone.0084312&representation=XML")
sapply(c("contrib-type","xlink:type"), function(x) xpathSApply(exdoc, '//contrib', xmlGetAttr, x))
#works
的输出 contrib-type xlink:type
[1,] "author" "simple"
[2,] "author" "simple"
[3,] "author" "simple"
[4,] "author" "simple"
[5,] "author" "simple"
[6,] "editor" "simple"
答案 0 :(得分:0)
这让你非常接近我认为你需要的地方。 XML和xpath对我来说都是黑魔法。感谢这篇文章:Issues Extracting Data from XML files using R
library(XML)
doc1 <- xmlParse("http://www.uniprot.org/uniprot/p05067.xml", useInternalNodes = TRUE)
nd <- getNodeSet(doc1, "//ns:feature", namespaces=c(ns=getDefaultNamespace(doc1)[[1]]$uri))
y <- list(type=xmlApply(nd, xmlGetAttr, name="type"),
desc = xmlApply(nd, xmlGetAttr, name="description"))