r - `R::XML` : xmlParse(isURL = TRUE) 不起作用 (?) 并且 XPath 在多个节点上带有子字符串
问题描述
我从 NCBI 下载了一个 XML 文件,其中包含对应于 2 个核苷酸序列的分类值。我想使用R
andXPath
表达式提取这 2 个出租车值。
问题 1
在下面的代码中,我将 url 传递给RCurl::getURL()
然后传递给
XML::xmlParse()
. 是否可以将网址直接传递给
XML::xmlParse()
?我试过XML::xmlParse(efetch_url, isURL = TRUE)
但无济于事。
我看到很多使用 的示例RCurl
,所以也许有充分的理由这样做并且不将 url 直接传递给xmlParse
?
library(XML)
library(RCurl)
efetch_url <- "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nuccore&rettype=gb&retmode=xml&id=MZ959190,MZ959191"
xml <- efetch_url |> RCurl::getURL() |> XML::xmlParse()
问题2
通过以下 2 个 XPath 查询,我设法提取了正确的节点(两种语法的结果相同)
taxid <- xmlValue(getNodeSet(xml, "//GBQualifier[./GBQualifier_name = 'db_xref']/GBQualifier_value"))
taxid <- xmlValue(getNodeSet(xml, "//GBQualifier_value[contains(.,'taxon:')]"))
taxid
#> [1] "taxon:2849586" "taxon:52462"
但我需要没有taxon:
部分的 ID。我可以在 R 中做到这一点:
gsub("taxon:", "", taxid)
#> [1] "2849586" "52462"
但我想要一个纯粹的 XPath 解决方案。
我试过这个,但我只得到第一个 ID 的值:
getNodeSet(xml, "substring(//GBQualifier_value[contains(.,'taxon:')], 7, 10000)")
#> [1] "2849586"
同样的问题 :
getNodeSet(xml, "substring-after(//GBQualifier_value[contains(.,'taxon:')],'taxon:')")
#> [1] "2849586"
我对使用 XPath 的几种替代解决方案感兴趣(以了解有关此查询语言的更多信息)并了解为什么这些最后的查询不能按我预期的那样工作。
解决方案
推荐阅读
- xml - PLSQL XMLTable XPath get all tags of furthest depth
- javascript - 将数组中的字符串分解为子数组
- php - curlopt_url 中的卷曲和数组值不起作用
- python - 如何使用索引替换列值的前两个字母
- mysql - 如果表 1 中的列不为 Null,则更新表 2
- oauth - 如何确定过期的访问令牌?
- php - 通过 curl 将数据发布到 php。jsondata.php 没有给出 json 输出
- c# - 为什么使用内部等待任务的映射函数调用 Select() 会返回任务列表而不是它们的结果?
- javascript - document.getElementById().children.length - 无法读取 null 的属性“孩子”
- c# - Serilog 解构.通过转换
() 不工作