使用R从XML节点提取多个属性数据

时间:2017-08-09 12:54:23

标签: r xml

我试图从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"

1 个答案:

答案 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"))