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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在函数中使用getNodeSet(XML包)?相关的知识,希望对你有一定的参考价值。

我正在尝试开发一个脚本来从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(“xtract”,list(compounds))

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

xtract(102.91_1180.5732m/z)

我得到:错误:“xtract(102.91_”)中的意外输入任何人都可以帮助解决此问题?

答案

在功能中它应该是

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

然后以下调用将起作用

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

以上是关于如何在函数中使用getNodeSet(XML包)?的主要内容,如果未能解决你的问题,请参考以下文章

使用 XML / RCurl R 包解析 HTML 表,而不使用 readHTMLTable 函数

如何将数据包从服务器发送到客户端(从函数)Ejabberd

如何在转换中使用 xml csv-parser 包? (命名空间给出无效的 obj ref)

容器环境下如何将NuGet包XML文档添加到Swagger

如何使用 testng.xml 运行测试文件

如何使用 spark-xml 包使用 XSD 解析 XML?