我从 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/