如何在函数中使用getNodeSet(XML包)?

时间:2018-03-04 18:20:58

标签: r xml function xpath

我正在尝试开发一个脚本来从xml文件中提取信息。在解析XML文件后,我使用

idNodes <- getNodeSet(doc, "//compound[@identifier='101.37_1176.0998m/z']") 

对文档的特定部分进行子集化,然后使用诸如

之类的行提取我需要的信息
subject <- sapply(idNodes, xpathSApply, path = './condition/sample', function(x) xmlAttrs(x)['name'])

我的xml文件有数百个101.37_1176.0998m / z类型的标识符 不可能一次加载所有标识符所以我需要使用getNodeSet然后数据提取来遍历文件

如果我手动输入标识符,我的脚本可以正常工作,即

idNodes <- getNodeSet(doc, "//compound[@identifier='101.37_1176.0998m/z']")

但是我想写一个函数,所以我可以使用do.call来传递一个标识符列表。

我试过了

xtract <- function(id){
idNodes <- getNodeSet(doc, "//compound[@identifier='id']")} 

但是当我使用这个功能时,即

xtract('102.91_1180.5732m/z')

compounds <- c("101.37_1176.0998m/z", "102.91_1180.5732m/z")

do.call(&#34; xtract&#34;,list(compound))

很明显getNodeSet没有工作,即没有数据要提取。 如果我使用

xtract(102.91_1180.5732m/z)

我得到:错误:&#34; xtract中的意外输入(102.91 _&#34; 任何人都可以帮助解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

在功能中它应该是

idNodes <- getNodeSet(doc, paste0("//compound[@identifier='",id,"']"))

然后以下调用将起作用

xtract('102.91_1180.5732m/z')