xml - 在 R 中使用 getNodeSet 进行复杂的 xPath 查询

标签 xml r xpath

我从 Uniprot 蛋白质数据库下载了以下 xml 文件。

protein <- xmlRoot(xmlTreeParse("http://www.uniprot.org/uniprot/Q01974.xml"))

从众多带注释的特征中,我对存储在以下 xml 节点中的激 enzyme 域的开始和结束位置感兴趣:
<feature type="domain" description="Protein kinase">
<location>
<begin position="288"/>
<end position="539"/>
</location>
</feature>

使用 getNodeSet 我可以很好地找到这个标签:
getNodeSet(protein, "//uniprot:feature[@type=\"domain\" and @description=\"Protein kinase\"]", c(uniprot="http://uniprot.org/uniprot"))

不幸的是,我无法缩小查询范围,添加任何其他条件都会返回一个空列表。例子:
getNodeSet(protein, "//uniprot:feature[@type=\"domain\" and @description=\"Protein kinase\"]/location", c(uniprot="http://uniprot.org/uniprot"))

基于在线 xpath 测试器,这应该是有效的 xpath 查询,但返回空:
list()
attr(,"class")
[1] "XMLNodeSet"

有人可以帮我解决这个问题吗?
我确信这是 getNodeSet 的正常行为,但我不知道它背后的原因是什么。
一般来说,在 R 中表达这种相对复杂的查询的最合适的方式是什么?我应该存储结果然后进一步缩小范围吗?

非常感谢你!

最佳答案

对后续元素也使用相同的前缀:

//uniprot:feature[...]/uniprot:location
prefix + local-name识别每个元素。如果您有带有默认命名空间的 XML(似乎这就是您所拥有的),则默认命名空间中会考虑所有没有前缀的元素。这就是为什么您需要为 XPath 中的每个元素(不仅是第一个元素)使用 prefix* 的原因。

*) 指向默认命名空间 URI 的前缀

关于xml - 在 R 中使用 getNodeSet 进行复杂的 xPath 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23211020/

相关文章:

.net - XML 到 .NET 类

r - 在 R 中更改图像像素颜色并保存图像

r - Extent S4 类,如何使用父类(super class)的构造函数

xml - 返回与其他同名元素相同路径中的元素值

html - 有没有办法让 YQL 返回 HTML?

android - backgroundTint 对 Lollipop 版本没有影响

php - xml 集成 - 将 xml 发布到 url

python - XPath 没有使用迭代器指向正确的 HTML 表元素(Scrapy)

Java正则表达式模式匹配多个相同标签

r - 通过data.table roll ='nearest'函数合并两组数据